我碰到了一些我不理解的东西.当第二个相同的时候,为什么不是每个循环都合法?
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
mik*_*kej 18
由于您的实例变量private SomeInterface someInterface未指定其泛型类型参数,因此禁用所有泛型使用someInterface.这意味着someInterface.getObjects()具有原始返回类型List而不是List<SomeNamedObject>.这是第一个例子不编译的原因.
在第二个示例List<SomeNamedObject> objects = someInterface.getObjects()中,为列表添加显式类型.当您这样做时会看到警告,因为不保证类型安全.如果getObjects()定义为List getObjects()没有type参数,则会出现相同的行为.
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |