Java泛型和返回类型
发布时间:2020-05-22 12:02:18 所属栏目:Java 来源:互联网
导读:我刚刚遇到一些我不明白的东西.当第二个相同的时候,为什么每个循环都不合法? public interface SomeInterfaceT { ListSomeNamedObject getObjects(); void doSomething(P1 p1, T p2);}public class SomeNamedObject { private String
|
我刚刚遇到一些我不明白的东西.当第二个相同的时候,为什么每个循环都不合法? 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(),那么这将是你看到的一样的行为.(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
