public void test(Class<T> clazz) 

   List list = new ArrayList(); 

这个clazz是从别的地方传过来的,可不可以指定list只能存储这个Class我用 List<clazz> list = new ArrayList<clazz>(); 并且在类名后加上 <clazz>编译可以通过,但是运行时在后面还可以给list  add不同于clazz的对象,不知道这是为什么? 

解决方案 »

  1.   


    List<Class<T>> list = new ArrayList<Class<T>>();
      

  2.   


    public void test(Class <T> clazz) 

      List<Class<T>> list = new ArrayList<Class<T>>();} 
      

  3.   

    谢谢各位但我在跑下面这个代码时会出   "java.lang.ClassCastException: java.lang.String" 为什么啊?
    public class Test<T> { public void test(Class<T> clazz){

    List<Class<T>> list = new ArrayList<Class<T>>(); Object str = new String("aa");
    list.add((Class<T>) str);
    }

    public static void main(String[] args){

    Test t = new Test();
    t.test(String.class);

    }
      

  4.   

    Object str = new String("aa");
    list.add((Class <T>) str); 你为什么要把 str 强制转换为 T?你明明知道 str 是字符串类型的。
      

  5.   

    list.add((Class <T>) str); 
    改为:list.add(str.getClass()); 
    试试
      

  6.   

    但是运行时在后面还可以给list  add不同于clazz的对象1 你确信你的list 是泛型声明的吗?
    2 你确信你添加的不是一个子类? List<String> list = new ArrayList<String>();你看看是不是只能向list里面加入字符串?呵呵
      

  7.   

    不强制转换的话,编译器不让通过啊 
    为什么已经指定List存储String类型 还会出错呢
      

  8.   

    TO  java2000_net   
      List<String> list = new ArrayList<String>();  这么定义的话当然只能添加String类型的了
      但是3楼的贴代码为什么会出错TO duanjianbo
      试过了还是不行的
      

  9.   

    list.add((Class <T>) str.getClass());
      

  10.   

    换成list.add((Class <T>) str.getClass());  没有错了public class Test<T> { public void test(Class<T> clazz){

    List<Class<T>> list = new ArrayList<Class<T>>(); Object str = "aa";
    list.add((Class<T>) str.getClass());

    Object timestamp = new Timestamp(100);
    list.add((Class<T>) timestamp.getClass());
    }

    public static void main(String[] args){

    Test t = new Test();
    t.test(String.class);

    }
    }
    可是这段代码跑起来也正常,貌似传进去的"String.class"没有起到作用
      

  11.   

    public class Test <T> {    public void test(Class <T> clazz){        List <Class <T>> list = new ArrayList <Class <T>>();        Object str = "aa"; 
           list.add((Class <T>) str.getClass());        Object timestamp = new Timestamp(100); 
           list.add((Class <T>) timestamp.getClass());   //没有出错
       }    public static void main(String[] args){        Test t = new Test(); 
           t.test(String.class); 
       } 

    拜托哪位大侠看看,为什么那里没有出错。
      

  12.   


    public class Test <T> {  public void test(Class <T> clazz){  List <Class <T>> list = new ArrayList <Class <T>>();  Object str = new String("aa"); 
    list.add((Class <T>) str); //你的这句错了,改为list.add((Class <T>) str.getClass());
      System.out.println("hello");
    }  public static void main(String[] args){  Test t = new Test(); 
    t.test(String.class);  }
    }
      

  13.   

    String 类型向class类型转换当然出错了。