首页  »   J2SE

泛型数组转换错误

网友分享于:2015-11-15  浏览:0次
泛型数组转换异常
3
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at Generic.GenericStack.main(GenericStack.java:13)


代码:
package Generic;

public class GenericStack<E>
{
   private E[] list =  (E[]) new Object[2];
   public static void main(String[]args)
   {
   GenericStack<String> example = new GenericStack<String>();
   example.push("red");
   example.push("blue");
   example.push("green");
   System.out.println(example.getSize());
   System.out.println(example.list.length);//这的问题
   System.out.println(example.peek());
   }
   public int getSize()
   {
  int size = 0;
  for(E element:list)
  {
 if(element!=null)
 {
 size++;
 }
  }
  return size;
   }
   public E peek()
   {
  return list[getSize()-1];
   }
   public void push(E element)
   {
  if(getSize()==list.length)
  {
 E[] list1 = (E[])new Object[list.length*2];
 System.arraycopy(list, 0, list1, 0, list.length);
 list=list1;
 list[getSize()]=element;
  }
  else
  {
 list[getSize()]=element;
  }
   }
   public boolean isEmpty()
   {
  boolean isEmpty = false;
  if(getSize()==0);
  {
  isEmpty = true;
  }
  return isEmpty;
   }
}
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at Generic.GenericBinarySearch.binarySearch(GenericBinarySearch.java:22)
at Generic.GenericBinarySearch.main(GenericBinarySearch.java:9)
代码:
package Generic;

public class GenericBinarySearch 
{
      public static void main(String[] args)
      {
       Integer[]example = {1,2,3,4,5,6,7,8,9};
       Integer a = new Integer(3);
       System.out.println(GenericBinarySearch.binarySearch(example,a));
      }
      public static <E extends Comparable<E>> int binarySearch(E[] list,E key)
      {
      int search = -1;
      int index = 0;
      while(list.length>1)
      {
      int left = 0;
          int right = list.length-1;
          if(list[list.length/2].compareTo(key)>0)
          {
          right = list.length/2-1;
          E[] list1 = (E[])new Object[right-left+1];//这的问题
              System.arraycopy(list, left, list1, 0, list1.length);
              list = list1;
          }
          else if(list[list.length/2].compareTo(key)==0)
          {
              search=list.length/2+index;
              break;
          }
          else
          {
          left = list.length/2+1;
          index = list.length/2+1;
          E[] list1 = (E[])new Object[right-left+1];
              System.arraycopy(list, left, list1, 0, list1.length);
              list = list1;
          } 
      }
      if(list.length==1)
      {
      if(list[0].compareTo(key)==0)
      {
      search = index;
      }
      }
      return search;
      
      }
}

------解决思路----------------------
使用数组的length属性时声明类型和实际类型必须相同
只是实现一个栈的话,还是用LinkedList保存元素吧

------解决思路----------------------
楼主要学会贴代码
public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}
像楼主的代码层级多,又没有排版,没法看。
------解决思路----------------------
不要把泛型和数组混合在一起,用LIST啦

相关解决方案

最新解决方案