从类变量创建参数化列表

时间:2014-08-12 14:06:46

标签: java

我想从Class变量创建一个列表。

...
Class clazz = someObject.getClass(); 
List<clazz> myList = new ArrayList<clazz>(); // this line is a compilation error
...

我怎么做?

编辑:我认为你弄错了。例如,如果someObjectCar,则myList类型应为List<Car>。我想以某种方式将我的clazz变量视为一种类型。

3 个答案:

答案 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的类型(对于编译器)。你无法在运行时看到它们:)