私はちょうど私が理解していないものに遭遇しました。 2番目のループが正当なものである場合、各ループが合法的でない理由は何ですか?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
問題の内容がわかりません。実際のスタックトレース(最初の数行だけ)を投稿できますか?私はあなたのフルクラスを推測している "SomeInterface"が必要ですが、例は ""を必要としませんおそらくそこに何かがありますか? –
Jay
@Jay彼のsomeInterfaceの宣言はジェネリック型を指定しません。その後、Javaは生の型に戻り、メソッドのシグネチャは生のList(返答参照)を返します。彼はオブジェクトの割り当てに関する警告を述べたはずです。 – Stefan