在Java中,如何实现返回Class <list <string>&gt; </list <string>的方法

时间:2014-03-11 19:40:00

标签: java class generics

我正在扩展的一个泛型类要求我返回一个正确泛型类型的Class对象。我知道如何在正常情况下执行此操作,但不是在我的类包含通用列表时。

例如,我知道如何实现下面的第一种方法,但不知道第二种方法:

public Class<String> getStringKlass() {
    return String.class;
}

public Class<List<String>> getStringListKlass() {
    ???
}

3 个答案:

答案 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;
}

但是,我不知道在那之后你的代码会引入什么样的麻烦。