我有一个关于 Java 泛型的问题。在下面的代码中,我们将接口 B 参数化为另一种必须实现接口 A 的类型。
这段代码是正确的。问题是:为什么它不适用于以下 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();
}
}