我正在扩展的一个泛型类要求我返回一个正确泛型类型的Class对象。我知道如何在正常情况下执行此操作,但不是在我的类包含通用列表时。
例如,我知道如何实现下面的第一种方法,但不知道第二种方法:
public Class<String> getStringKlass() {
return String.class;
}
public Class<List<String>> getStringListKlass() {
???
}
答案 0 :(得分:2)
这很简单
List.class
通用信息用于编译时。对于运行时,泛型被忽略,它只是重要类的类型。
答案 1 :(得分:1)
由于类型擦除,没有办法做到这一点:在Java中,如果你有一个泛型类型(这里:List<T>
),那么在编译时你可以使用List<String>
,List<Date>
等。但是,在运行时,所有这些类型都由相同的Class
对象表示。
换句话说,以下程序将输出true
:
ArrayList<String> list = new ArrayList<String>();
System.out.println(list.getClass() == ArrayList.class);
答案 2 :(得分:0)
我最接近实现的目的是创建一个扩展一些List<String>
的新类。
public class ListOfStrings extends ArrayList<String> { }
然后在您的方法中使用<? extends List<String>>
而不只是List<String>
:
public Class<? extends List<String>> getStringListKlass()
{
return ListOfStrings.class;
}
但是,我不知道在那之后你的代码会引入什么样的麻烦。