package com.kevin.test2;import java.util.ArrayList;
import java.util.List; class A {}
class B extends A{
}
class C extends A{
}
public class Test{
private static List<Class<? extends A>> types =
new ArrayList<Class<? extends A>>(); public static void main(String [] args) throws ClassNotFoundException{
types.add((Class<? extends A>)Class.forName("com.kevin.test2.C"));
types.add((Class<? extends A>)Class.forName("com.kevin.test2.B"));
//types.add(Class.forName("com.kevin.test2.C"));
//types.add(Class.forName("com.kevin.test2.B"));
}
}
请问ArrayList中既然装的是A或是A的子类的Class对象,那么像注释的那样传递B和C的Class对象为何不可,为何仍要转型?
所以要加一个强制转换,才能保证编译通过。
就像
List<String> list=new ArrayList<String>();
Sting str="Ok";
list.add(str);//可以添加
Object obj=str;
list.add(obj);//不可以添加
types.add(Class.forName("com.kevin.test2.C"));
其实等同于:
types.add( new Object() ); 如果这样就可以:
types.add( new C() );