2
我試圖編寫一個可迭代的接口並支持多個抽象層次。我無法正確定義界面。在泛型迭代中支持接口和類
我已經聲明瞭以下接口和類(玩具爲例):
public interface A {}
public class B implements A {}
public interface C <T extends A> extends Iterable<T> {}
public class D implements C<B> {
public Iterator<B> iterator() { ... }
}
以下工作:
D d = new D();
for (A a : d) {}
for (B b : d) {}
但下面不會編譯。 Java說for-each循環變量應該是Object類型的。
C c = new D();
for (B b : c) {}
我知道我可以強制安撫在第二個例子中的編譯器,但這似乎很可惜。有什麼辦法可以聲明接口C和子類D,以便我可以支持這兩種迭代場景,或者這是不可能的?謝謝!
啊哈!不知何故,C的類型參數需要B的一個子類的事實讓我忽略了這一點。現在你明確指出了這一點。謝謝! –