簡體   English   中英

是否有可能同時和一般地將有界泛型類和通用接口子類化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM