this question까지 추적 할 수 있지만 자급 자족하도록 노력하겠습니다.일반 매개 변수와 호환되는 인터페이스 확장을 어떻게 만들 수 있습니까?
한다고 가정 내가 가진 여러 가지 이유로 구현 클래스 나타내는 제네릭 형식 매개 변수가 Animal
라는 인터페이스 : 나는 또한 하위 인터페이스를
public interface Animal<A extends Animal<A>>
, Dinosaur
, 같은 방식으로 작동합니다 :
public interface Dinosaur<D extends Dinosaur<D>> extends Animal<D>
는 지금은 Animal
를 구현하는 클래스 Lizard
이
및 Dinosaur
를 구현하는 서브 클래스, Trex
:
public class Trex extends Lizard implements Dinosaur<Trex>
이 네 개의 선언이 이제 오류가 발생합니다. Trex
클래스는 Animal
인터페이스를 두 번 구현하지만 형식 매개 변수가 다르므로 Lizard
을 확장하고 Animal<Lizard>
인터페이스를 구현하며 Dinosaur<Trex>
을 구현하므로 Animal<Trex>
을 구현합니다.
Animal<Trex>
는 Trex
이 Lizard
의 서브 클래스 임에도 불구하고, Animal<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