我有一个关于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();
}
}
编辑:我已经重写了代码。现在我们有一只鸟,它可以通过声音进行参数化。问题是为什么需要无用的_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();
}
}