我设计了这样一个类:
class littleCollector<T extends Number> { private T[] cache;
private int size = 0, contains = 0; /**
 * 初始容量为10
 */
@SuppressWarnings("unchecked")
public littleCollector() {
cache = (T[]) new Object[10];
}}
目的是设计一个容器类,封装数字对象。默认有10个对象。怎样初始化才正确呢?这段代码运行后就提示Exception in thread "main" java.lang.ClassCastException。请教各位大侠这应该怎么解决?

解决方案 »

  1.   

    public class littleCollector<T extends Number> {private T[] cache;
    private int size = 0, contains = 0;/**
    * 初始容量为10
    */
    @SuppressWarnings("unchecked")
    public littleCollector() {
    cache = (T[]) new Object[10];
    }  public static void main(String []args){
       //写入测试代码了
      }}
      

  2.   


    package General;
    import java.util.*;
    import java.lang.reflect.*;
    /**
     * 2011-7-5 0:43:51
     * @author Administrator
     */
    public class Test<T extends Number> {
        public Test(T t){
            Class cls=t.getClass();
            //创建一个类型为cls所指类型的20个元素的数组
            T array[]=(T[])Array.newInstance(cls, 20);
            for(int i=0;i<array.length;i++){
                try {
                    //创建一个cls所指类型的实例.
                    //第一步是得到要创建的实例类型的构造函数,这里涉及到一个问题,一个类可能有很多构造函数
                    //你想调用哪个呢.对于实际情况,既然你设计的范型,当然就不是针对某一个类而设计的,至少是
                    //一批类.那么这时候,你的构造函数的参数表,当然就是某一个特定类的参数表,而是一批类所相同
                    //形式的表.这里,我使用了Number的子类所共同形式参数表的构造函数,即参数为String
                    //其实,如果你想调用无参构造函数的话,大可不必这么麻烦,直接
                    //cls.newInstance()即可.但是Number的子类是没有无参形式的构造函数滴
                    array[i]=(T)cls.getConstructor(String.class).newInstance(new String("123"));
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            System.out.println(Arrays.toString(array));
        }
        public static void main(String args[]){
            Test<Integer> test=new Test<Integer>(0);
        }
    }
      

  3.   

    Test<Integer> test=new Test<Integer>(0);
      

  4.   

    泛型如楼上所说的:
                    //创建一个cls所指类型的实例.
                    //第一步是得到要创建的实例类型的构造函数,这里涉及到一个问题,一个类可能有很多构造函数
                    //你想调用哪个呢.对于实际情况,既然你设计的范型,当然就不是针对某一个类而设计的,至少是
                    //一批类.那么这时候,你的构造函数的参数表,当然就是某一个特定类的参数表,而是一批类所相同
                    //形式的表.这里,我使用了Number的子类所共同形式参数表的构造函数,即参数为String
                    //其实,如果你想调用无参构造函数的话,大可不必这么麻烦,直接
                    //cls.newInstance()即可.但是Number的子类是没有无参形式的构造函数滴
      

  5.   

    把cache = (T[]) new Object[10];改为cache = (T[])new Number[10];
      

  6.   

    哎呀,各位不好意思呀。菜鸟我好久没来了。今天结贴啦。多谢各位大侠啦!!学习很多啊。这个java的泛型还是有些那个什么的嘛~~