我對Java泛型有個疑問。在下面的代碼中,我們有通過必須實現接口A的另一種類型進行參數化的接口B.Java泛型 - 需要說明
此代碼是正確的。 問題是:爲什麼它不適用於下面的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
得到一些書,然後混淆泛型。你完全錯過了他們的觀點。我首先建議Java頭。 –
我第二。您正試圖在該列表類型中指定您的整個繼承層次結構。我不知道你爲什麼想這樣做,但它幾乎肯定不是做事的最佳方式。如果你提供更多關於你想要達到的內容,你可能會得到更好的答案。 – Jochen