具有其他类型的Collection getter的泛型类
目前,我在Java中遇到通用类问题。
我有这样的事情:
public class GenericClass<T> {
T doSomething() {...}
Collection<String> getCollection() {...}
}
现在,我实例化了一个没有类型参数的类的对象,因为我对此没有兴趣或不知道。
GenericClass obj = new GenericClass();
for (String str : obj.getCollection() { // won't work
...
}
问题是,尽管编译器不依赖于参数,但它不仅丢弃有关类型参数的信息,而且还丢弃有关集合(字符串)的类型的信息。
我是在做错什么,还是Java的限制?如果是这样,那为什么会有限制?
-
你做错了
如果您不知道T类型,则只需使用通配符:
GenericClass<?>。实例化new时,您无法执行此操作GenericClass,因此只需使用Object:
GenericClass<?> obj = new GenericClass<Object>();
出于向后兼容的原因,故意使一个根本没有任何泛型信息(
GenericClass
没有任何信息<>
)的类失去了所有泛型类型安全性,因此可以将其与前泛型代码安全地使用。 -
以下代码可以正常工作。与其直接从中提取值
obj.getCollectionn()
,不如将其存储到某个Collection
变量然后访问它。GenericClass obj = new GenericClass(); Collection<String> c = obj.getCollection(); for (String string : c) { //Some complex Code }