跟进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