我刚碰到一些我不明白的东西。为什么不是每个循环低于合法时,当第二个相同的是?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
}
}
}
不是一个错误,它是一个擦除和原始类型的问题。 – Stefan 2011-12-20 18:26:25
我没有看到问题可能是什么。你可以发布实际的堆栈跟踪(只是前几行)。我猜你的全班学生需要“SomeInterface”,但这个例子并不需要“”也许里面有东西吗? –
Jay
2011-12-20 18:27:07
@Jay他的someInterface的声明没有指定泛型类型,然后Java退回到原始类型,并且方法签名更改为返回原始列表(请参阅答案)。他应该提到关于对象分配的警告。 – Stefan 2011-12-20 18:34:47