Java Generics에 대한 질문이 있습니다. 아래의 코드에서는 인터페이스 B를 인터페이스 A를 구현해야하는 다른 유형으로 매개 변수화했습니다.Java Generics - 설명 필요
이 코드는 올바른 코드입니다. 질문 : 다음 list() 메서드 선언과 함께 작동하지 않는 이유는 무엇입니까?
private <X extends A, Y extends B<X>> List<Y> list()
근무 코드 :
public interface A {
}
public interface B<T extends A> {
}
public class Test {
private static class AA implements A {}
private static class BB implements B<AA> {}
private <R extends A, X extends R, Y extends B<X>> List<Y> list() {
return null;
}
private void test() {
List<BB> l = list();
}
}
편집 : 나는 코드를 재 작업했습니다. 이제 우리는 그것이 만들어 낼 수있는 소리에 의해 새가 확인되었습니다. 질문은 useless_t가 필요한 이유입니까?
public class Test {
public interface Sound {
}
public interface Bird<T extends Sound> {
}
private static class Quack implements Sound {}
private static class Duck implements Bird<Quack> {}
private <useless_t extends Sound, sound_t extends useless_t, bird_t extends Bird<sound_t>> List<bird_t> list() {
return null;
}
private void test() {
List<Duck> l = list();
}
}
달성하려는 목표는 무엇입니까? – krock
책을 사서 제네릭을 뒤죽박죽. 당신은 완전히 그들의 요점을 놓칩니다. 나는 자바 헤드를 먼저 제안한다. –
그 두 번째. 해당 목록 유형에서 전체 상속 계층 구조를 지정하려고합니다. 왜 그렇게하고 싶지는 모르겠지만 일을하는 가장 좋은 방법은 거의 아닙니다. 성취하려는 것에 대해 더 많은 맥락을 제시하면 더 나은 대답을 얻을 수 있습니다. – Jochen