[英]Is it possible to simultaneously and generically subclass both a bounded generic class and a generic interface?
我試圖通過繼承另一個泛型類(帶有一個綁定)並實現一個通用接口(沒有綁定)來創建一個新類:
public class Foo1<T extends Bar> {
...
}
public interface Foo2<T> {
...
}
public class ProblemClass<T extends Bar, U>
extends Foo1<T extends Bar> implements Foo2<U> {
...
}
這給了我編譯錯誤。 我也嘗試過:
public class ProblemClass<T, U>
extends Foo1<T extends Bar> implements Foo2<U> {
...
}
public class ProblemClass<T extends Bar, U>
extends Foo1<T> implements Foo2<U> {
...
}
但這些都不起作用。
什么是正確的語法來定義我的子類的方式,讓我保持鍵入通用,讓我將它們的類型傳遞給超類和接口? 這甚至可能嗎?
謝謝!
該聲明應該可以正常工作。 你得到什么錯誤? 你用的是什么編譯器?
class ProblemClass<T extends Bar, U>
extends Foo1<T>
implements Foo2<U>
{
...
}
這是有效的Java。 如果IDEA的編譯器拒絕它,IntelliJ就有一個bug。
從您發布的代碼中,您只有Foo類而不是Foo1類。 這是什么原因? 或只是發布 - 編輯錯誤?
我認為這應該有效
public class ProblemClass<T extends Bar, U>
extends Foo1<T> implements Foo2<U> {
...
}
這不會給JDK 1.6.0_07帶來編譯錯誤
public class Bar {}
public class Foo1<T extends Bar> {}
public interface Foo2<T> {}
public class ProblemClass<T extends Bar, U> extends Foo1<T> implements Foo2<U> {}
這(來自你的問題):
public class ProblemClass<T extends Bar, U>
extends Foo1<T extends Bar> implements Foo2<U> {
...
}
應該這樣:
public class ProblemClass<T extends Bar, U>
extends Foo1<T> implements Foo2<U> {
...
}
也就是說,在擴展Foo1時不應重述邊界。
通過該更正,代碼在javac中編譯得很好。 如果IntelliJ IDEA仍然拒絕編譯它,那么你可能發現了一個錯誤,或者你在Foo.java中引用的“Bar”與ProblemClass.java中的“Bar”不一樣?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.