我剛碰到一些我不明白的東西。爲什麼不是每個循環低於合法時,當第二個相同的是?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