[英]Generic type in class declaration
我有
1)基本界面,
2)實現此接口的幾個類,
3)和一個我想接受的泛型類,作為參數,任何實現類
我嘗試過以下方法:
public class Foo extends Bar<? extends SomeInterface> {
public Foo(List<? extends SomeInterface> someInterfaceList) {
super(someInterfaceList);
}
...
}
我收到錯誤No Wildcard Expected
。 在我的代碼的其他地方,我有List<? extends SomeInterface>
List<? extends SomeInterface>
我沒有收到錯誤,為什么我在這里遇到問題? 我該如何解決這個問題並仍能獲得理想的結果?
我試過搜索'沒有通配符預期'和'通知卡在課堂聲明'無濟於事。 提前致謝!
聽起來你想聲明一個你將在別處引用的泛型類型參數。 通配符僅在類型僅使用一次時才有意義,並且在為類聲明泛型類型參數時這沒有任何意義。
試試這個:
public class Foo<T extends SomeInterface> extends Bar<T> {
public Foo(List<T> someInterfaceList) {
super(someInterfaceList);
}
...
}
在編寫代碼時,類的用戶無法為Bar<>
指定泛型類型參數,因為Foo
本身不是泛型類型。
此外,如果這是可能的,那么Bar<>
的泛型參數可能與List<>
的泛型參數不同 - 只要兩個類型都實現了SomeInterface
,就不會出現編譯時問題。這些定義,但是當您錯誤地認為兩種類型必須相同時,可能會出現更加混亂的錯誤消息。
所以, 一旦聲明泛型類型為通用參數傳遞給Foo
類,然后使用(該類型T
在我的例子),在其他地方是指那種類型,而不是接受,可能指的不是同一類型的一些新的泛型類型參數的。
我不確定你在尋找什么,所以如果你能提供更多的細節,它可能會有所幫助。 也許您可以更具體地了解您計划如何實例化和使用這些對象?
無論如何,我想你可能正在尋找這樣的東西:
import java.util.List;
public class Foo<T extends SomeInterface> {
public Foo(List<T> someInterfaceList) {
for (T item : someInterfaceList) {
// do something with each item
}
}
}
class Bar<T> {}
interface SomeInterface<T> {
T x(T y);
}
或者,您也可以使用以下內容作為構造函數:
public Foo(List someInterfaceList) {
但是你不會有一種簡單的方法來獲取列表中項目的類型T.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.