我想从Class
变量创建一个列表。
...
Class clazz = someObject.getClass();
List<clazz> myList = new ArrayList<clazz>(); // this line is a compilation error
...
我怎么做?
编辑:我认为你弄错了。例如,如果someObject
是Car
,则myList
类型应为List<Car>
。我想以某种方式将我的clazz变量视为一种类型。
答案 0 :(得分:3)
编辑:
正如Boris the Spider在评论中指出的那样,通过使用泛型方法实际上是可能的,但稍作修改:
使用通用版本Class
。
Class<? extends [Type of someObject]>
对象
示例:
public static void main(String[] args){
Test t = new Test();
Class<? extends Test> testClass = t.getClass();
List<? extends Test> list = createListOfType(testClass);
}
private static <T> List<T> createListOfType(Class<T> type){
return new ArrayList<T>();
}
当然你也可以选择
public static void main(String[] args){
Test t = new Test();
List<? extends Test> list = createListOfType(t);
}
private static <T> List<T> createListOfType(T element){
return new ArrayList<T>();
}
旧帖子:
你不能
您不能,因为Java需要在编译时知道您要用于ArrayList
的泛型类型。尽管可以使用Object
作为类型。
答案 1 :(得分:1)
您不能使用变量名作为类型。您必须使用Class
代替clazz
List<Class> myList = new ArrayList<Class>();
答案 2 :(得分:1)
请记住type erasure
。明显的答案是,
List<Class> myList = new ArrayList<Class>();
您只能指定Object的类型(对于编译器)。你无法在运行时看到它们:)