我可以在泛型类声明中放置一个类吗?

时间:2015-04-10 10:49:26

标签: java generics

我想知道是否有办法做这样的事情:

Class clazz = Class.forname("java.lang.String");
GenericClass <clazz> generic = new GenericClass <clazz>();

将类放入泛型类参数中。

3 个答案:

答案 0 :(得分:2)

没有。泛型在编译时进行评估,而代码将在运行时稍后运行。

答案 1 :(得分:1)

不,没有。

但是,如果您知道自己在做什么,那么您就不必严格需要通用参数。您可以使用原始类型

GenericClass generic = new GenericClass();

Java使用&#34; erasure&#34;实现泛型 - 这意味着如果你编写像List<String> l = new ArrayList<String>();这样的东西,编译器会检查你是否从未尝试将任何不是字符串的东西放入其中,但它会丢弃(擦除)泛型并将其转换为List l = new ArrayList();

由于GenericClass<Anything>实际上只是一个GenericClass,因此您可以直接使用GenericClass。无论何时使用它都会得到编译器警告,你必须格外小心,只给它正确的对象,但有时候是必要的。

答案 2 :(得分:0)

根据您的目的,您可以使用其他通用方法解决您的具体问题。例如,此方法创建一个List,其中包含给定Class的实例:

<T> List<T> createListOf(Class<T> clazz) {
    List<T> result = new ArrayList<T>();
    result.add(clazz.newInstance());
    return result;
}

然后可以像这样调用它,而不知道实际的类型:

Class<?> unknownClass = Class.forName(unknownString);
List<?> listOfUnknownClass = createListOf(unknownClass);

(没有更多信息,我无法使这个答案更具体针对您的特定问题)