我有以下接口。HowTo通用通配符作爲參數
interface ITest<T extends Object>{
List<T> getValues();
Object getValueForKey(String key, T dataObject);
}
,所以我想用它的靜態方法,如:
static createTable(ITest<?> test){
for(? dataObject: test.getValues()){
Object value = test.getValueForKey("KEY", dataObject)
}
}
,它會彈出錯誤:「通配符可以使用僅作參考參數」
,當然這是不接受一個對象在 「getValueForKey()」
當我使用這樣:
ITest<Option> testImpl = new ITest<Option>(){
@Override
List<Option> getValues(){
new ArrayList<>(10);
}
...
}
createTable(testImpl);
如何能夠做到保持特定的在我的特定接口實現,但不是在使用接口的靜態方法(最好的情況:沒有選中解析/鑄造的警告)
我不明白這個問題。這個?通配符表示「我不在乎類型」。換句話說:「我知道關於這種類型的nada zip niente」。我沒有明白你爲什麼要將這種非知識與「我有一個特定的已知類型T」「對齊」。 – GhostCat
你期待什麼? dataObject'做什麼? – Oleg
這很簡單,靜態方法將用於許多不同的類型,並且不希望每次都實現它的類型,因爲它有很多冗餘的代碼 –