我們有一個或多或少像下面這樣的方法。 但是我們現在返回列表 ,它在函數bla()中將在運行時返回List<Bar>
。從泛型函數返回泛型類型
我正在尋找一種方法,使雙方
List<Interface> = troubleFuction(foo, bar.getCLass());;
和
List<Bar> = troubleFuction(foo, bar.getCLass());;
可能。 basicaly我希望它返回的是與接口兼容列表 然而,這提供了以下錯誤
*類型不匹配:不能從List<capture#3-of ? extends Bar>
轉換爲List<Interface>*
有沒有什麼辦法讓這個返回類型可能或不運行時擦除使這不可能
public <T1 extends Interface, T2 extends Interface> List<"problem"> troubleFunction(T1 in, Class<T2> clazz) {
return in.doStuffWhichGeneratesAlistOF(clazz)
}
public void bla() {
Foo foo = new Foo(); // implements interface
Bar bar = new Bar(); // implements interface
List<Interface> ifaces = toubleFuction(foo, bar.getCLass());
List<Bar> mustAlsoWork = toubleFuction(foo, bar.getCLass());
}
編輯: 在很多現有的代碼庫的方法被稱爲像
List<Bar> result = troubleFunction(List<Interface> list, Bar.class);
因此該返回類型必須保持兼容(重寫/重因子不是一個選項)
基本上我想的方法,如果稱爲
troublefunction(foo, Bar.class);
和 List<? super Foo>
時返回列表<? super Bar>
叫做
troublefunction(foo, Bar.class);
在Java中,函數被稱爲方法。 – eleven81 2009-05-26 14:50:42
接口不是保留字? – 2009-05-26 14:56:19