import java.util.*;
public class ExpandableArrayList<T> { private T[] entry;
private int length;
private static int initialCapacity = 10;

@SuppressWarnings("unchecked")
public ExpandableArrayList(int num){

//this.length = length;
entry = (T[])new Object[num];
this.length = entry.length;
System.out.println(entry.length);

}

//在末尾插入新元素
public boolean add(T newEntry){      
if(isArrayFull())    //如果数组满了   使用isArrayFull方法判断
doubleArray();   //那么就扩大一倍 使用doubleArray方法
entry[length] = newEntry;
length++;
return true;
}

public boolean isArrayFull(){
return this.length == entry.length;
}

private void doubleArray(){
T[] oldEntry = entry;
int oldSize = oldEntry.length;
entry = (T[])new Object[2*oldSize];  //需要强制类型转换
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ExpandableArrayList<String> Ex = new ExpandableArrayList<String>(2);
//Ex.length = 2;
Ex.add("a");
Ex.add("b");
Ex.add("b");
Ex.add("b");
int a = Ex.entry.length; //这句会出现一个错误 
//Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
// at ExpandableArrayList.main(ExpandableArrayList.java:44)
//System.out.println(Ex.add("b"));
//System.out.println(Ex.add("b"));
// System.out.println(Ex.entry.length);

}}求问为什么

解决方案 »

  1.   

    应该是你用泛型搞错了吧  而且你这个类定义的有点郁闷  我觉得是不是把要定义的那个T[] entry单独定义成一个类  然后呢 再写一个测试类  这样看着也不会乱了
      

  2.   

    Ex.entry.length
    是private型的,你能用吗
      

  3.   

    Java.lang.ClassCastException是类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。
    但我就是没找出来是什么原因。
    要跟你说点儿别的。
     private void doubleArray(){
            T[] oldEntry = entry;
            int oldSize = oldEntry.length;
            entry = (T[])new Object[2*oldSize];  //需要强制类型转换
        }调完这个后,先存的数据就没有了。
      

  4.   


     public boolean isArrayFull(){
            return this.length == entry.length;//这句有误
        }
        
      

  5.   

            Object[]b=Ex.getOb(); //这句会出现一个错误 
            int c=b.length;
            System.out.println(c);这样就行了!T也是默认是Object的!!哇哈哈!!
    getOb(); 
        public T[] getOb() {
        return (T[])entry;
        }
      

  6.   

    构造函数里边已经把this.length = entry.length;
    你在判断数组是否满的时候还是这句,导致数组里边有些元素是null
      

  7.   

    这个强制转换异常是当试图将对象强制转换为不是实例的子类时,抛出该异常,你比如
    ClassCastException: 
         Object x = new Integer(0);
         System.out.println((String)x);
    当你将一个object数组强制转换为String数组的时候也会产生这个异常,虽然string是object
    的子类但是数组却不好说,这个就是原因的所在。
    另外你的判断数组是否满的地方也有问题