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> ;.这是第一个例子没有编译的原因. 在第二个示例List< SomeNamedObject> objects = someInterface.getObjects()正在为列表添加显式类型.当您执行此操作时,您会看到警告,因为类型安全性不能保证.如果getObjects()被定义为没有type参数的List getObjects(),那么这将是你看到的一样的行为.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |