在java中,如何实现返回class< list< string>>的方法

m4pnthwp  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(1253)

我要扩展的泛型类之一要求返回正确泛型类型的类对象。我知道如何在正常情况下这样做,但当我的类包含泛型列表时就不知道了。
例如,我知道如何实现下面的第一种方法,但不知道第二种方法:

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

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

yuvru6vn1#

由于类型擦除,没有办法做到这一点:在java中,如果您有一个泛型类型(这里: List<T> )然后在编译时可以使用 List<String> , List<Date> 但是,在运行时,所有这些类型都由相同的 Class 对象。
换句话说,下面的程序将输出 true :

ArrayList<String> list = new ArrayList<String>();
System.out.println(list.getClass() == ArrayList.class);
flmtquvp

flmtquvp2#

这很简单

List.class

通用信息在编译时存在。对于运行时,泛型被忽略,只有类的类型才重要。

8i9zcol2

8i9zcol23#

我最接近的方法就是创建一个新类来扩展 List<String> .

public class ListOfStrings extends ArrayList<String> { }

然后使用 <? extends List<String>> 而不仅仅是 List<String> 在您的方法中:

public Class<? extends List<String>> getStringListKlass()
{
    return ListOfStrings.class;
}

然而,我不知道这之后会给你的代码带来什么样的麻烦。

相关问题