具有其他类型的Collection getter的泛型类

发布于 2021-01-30 16:37:53

目前,我在Java中遇到通用类问题。

我有这样的事情:

public class GenericClass<T> {
    T doSomething() {...}

    Collection<String> getCollection() {...}
}

现在,我实例化了一个没有类型参数的类的对象,因为我对此没有兴趣或不知道。

GenericClass obj = new GenericClass();
for (String str : obj.getCollection() { // won't work
    ...
}

问题是,尽管编译器不依赖于参数,但它不仅丢弃有关类型参数的信息,而且还丢弃有关集合(字符串)的类型的信息。

我是在做错什么,还是Java的限制?如果是这样,那为什么会有限制?

关注者
0
被浏览
228
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    你做错了

    如果您不知道T类型,则只需使用通配符:

    GenericClass<?>。实例化new时,您无法执行此操作GenericClass,因此只需使用Object:

    GenericClass<?> obj = new GenericClass<Object>();
    

    出于向后兼容的原因,故意使一个根本没有任何泛型信息(GenericClass没有任何信息<>)的类失去了所有泛型类型安全性,因此可以将其与前泛型代码安全地使用。



  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    以下代码可以正常工作。与其直接从中提取值obj.getCollectionn(),不如将其存储到某个Collection变量然后访问它。

    GenericClass obj = new GenericClass();
    Collection<String> c = obj.getCollection();
    for (String string : c) 
    {
        //Some complex Code
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看