我有一個類,它有一個自引用泛型參數和一個超類相同的參數。靜態函數與類具有相同的邊界。Java嵌套自引用泛型
public class Bar<T extends Bar<T, C>, C extends Bar<C, ?>> {
Bar() {
foo((T) null);
foo((C) null);//compile error
}
static <S_T extends Bar<S_T, S_C>, S_C extends Bar<S_C, ?>> void foo(S_T t) {
}
}
這給出了以下錯誤。
界不匹配:式酒吧< T,C>的一般方法foo(S_T)不 適用於參數(C)。推斷C型不是有效 替代有界參數< S_T延伸酒吧< S_T,S_C >>
我想不通爲什麼C
不能在自C
是Bar<C,?>
傳遞給foo()
並且通配符是Bar
,因爲聲明中的第二個參數表示它擴展了Bar。
我知道這可能是一個壞主意,併產生很難理解的代碼,但我真的想知道爲什麼這不編譯。
可能與我的問題http://stackoverflow.com/questions/9937422/a-bad-interaction-between-self-referential-types-:換句話說,編譯錯誤即使有這樣的代碼仍然存在and-bound-wildcards –
@JudgeMental有點類似;但從我從你的問題中收集到的是類層次結構無法編譯,而我的類層次結構編譯但失敗了函數的參數約束。 – dege