跟進this question,但我會盡量讓它自成一體。如何使擴展接口與通用參數兼容?
假設我有一個名爲Animal
的接口,這對於各種原因具有代表實現類泛型類型參數:
public interface Animal<A extends Animal<A>>
我也有一個子接口,Dinosaur
,其行爲以同樣的方式:
public interface Dinosaur<D extends Dinosaur<D>> extends Animal<D>
現在我有一個類Lizard
它實現Animal
:
public class Lizard implements Animal<Lizard>
和一個子類,Trex
,它實現Dinosaur
:
public class Trex extends Lizard implements Dinosaur<Trex>
這四個聲明現在產生錯誤。這是因爲類Trex
實現了兩次接口Animal
,但具有不同的類型參數:由於它擴展了Lizard
,它實現了接口Animal<Lizard>
,並且由於它實現了Dinosaur<Trex>
,它實現了Animal<Trex>
。
Animal<Trex>
不是Animal<Lizard>
子接口,即使Trex
是Lizard
一個子類,所以我們得到一個編譯錯誤。
我敢肯定,有一些解決方法使用通配符,但我無法弄清楚它是什麼。
這裏的東西,你可以編譯得到了同樣的錯誤:
public class InterfaceTest
{
private interface Animal<A extends Animal<A>> {}
private interface Dinosaur<D extends Dinosaur<D>> extends Animal<D> {}
private class Lizard implements Animal<Lizard> {}
private class Trex extends Lizard implements Dinosaur<Trex> {}
}
是的 - 使用其他答案正是我想到的解決方法。非常感謝您的幫助。 –
@ Donkey_2009沒問題。 – berry120