JavaGenericsについて質問があります。以下のコードでは、インターフェースAを実装する必要がある別のタイプによってパラメーター化されたインターフェースBがあります。
このコードは正しいです。質問は:なぜそれが次の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();
}
}