加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java泛型和返回类型

发布时间:2020-12-14 16:28:05 所属栏目:Java 来源:网络整理
导读:我刚刚遇到一些我不明白的东西.当第二个相同的时候,为什么每个循环都不合法? public interface SomeInterfaceT { ListSomeNamedObject getObjects(); void doSomething(P1 p1,T p2);}public class SomeNamedObject { private String text;}public class Cla
我刚刚遇到一些我不明白的东西.当第二个相同的时候,为什么每个循环都不合法?
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(),那么这将是你看到的一样的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读