Java泛型和返回类型

前端之家收集整理的这篇文章主要介绍了Java泛型和返回类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚遇到一些我不明白的东西.当第二个相同的时候,为什么每个循环都不合法?
public interface SomeInterface<T> {
   List<SomeNamedObject> getObjects();
   void doSomething(P1 p1,T p2);
}

public class SomeNamedObject {
    private String text;
}

public class Clazz {

    private SomeInterface someInterface;

    ...

    public void someMethod() {
       // Error Type mismatch: cannot convert from element type Object to TestClass.SomeNamedObject
       for (SomeNamedObject someNamedObject :  someInterface.getObjects()) {
             // This loop won't compile as the someInterface.getObjects returns just a List and not a List<SomeNamedObject>
       }

       // Warning Type safety: The expression of type List needs unchecked 
       // conversion to conform to List<TestClass.SomeNamedObject>
       List<SomeNamedObject> objects = someInterface.getObjects();
       for (SomeNamedObject someNamedObject :  objects) {
             // This loop compiles 
       }
    }
}

解决方法

因为您的实例变量private SomeInterface someInterface不指定其通用类型参数,所以对于someInterface,所有使用泛型都将被禁用.这意味着someInterface.getObjects()具有原始返回类型List而不是List< SomeNamedObject&gt ;.这是第一个例子没有编译的原因. 在第二个示例List< SomeNamedObject> objects = someInterface.getObjects()正在为列表添加显式类型.当您执行此操作时,您会看到警告,因为类型安全性不能保证.如果getObjects()被定义为没有type参数的List getObjects(),那么这将是你看到的一样的行为.

猜你在找的Java相关文章