2012-11-07 55 views
6

在我的代碼中,我有多個List<Future<something>>實例,我想要一個方法來處理等待它們完成。但是,我得到一個編譯器異常告訴我,actual argument List<Future<Boolean>> cannot be converted to List<Future<?>>不能在方法參數中使用列表<Future<?>>在從不同地方調用時的方法參數

這是方法頭:

public void waitForIt(<List<Future<?>> params) 

,這是它怎麼叫:

... 
List<Future<Boolean>> actions = new ArrayList<Future<Boolean>>(); 
waitForIt(actions); <-- compiler error here 
... 

我需要這爲List<Future<Map<String, String>>>和其他一些也正常工作。

+0

List >? – nogard

+0

nogard:號碼不起作用。 –

回答

2

使用此:

public <T> void waitForIt(List<Future<T>> params) 

Future<Boolean>不是Future<?>

http://ideone.com/tFECPN

+0

我喜歡這個比我的回答更好,我刪除了原來的一個。謝謝。 –

+0

「作爲未來不是未來的延伸」這是什麼意思? '未來'是未來的'亞型' – newacct

+0

它指的是已針對未來的讀者刪除 –

3

使用這個擴展:

public void waitForIt(List<? extends Future<?>> params) 

當你有List<A>List<B>,A和B必須完全匹配。由於Future<Boolean>Future<?>不完全相同,因此不起作用。

Future<Boolean>Future<?>的子類型,但這還不夠。 List<A>不是List<B>亞型即使是B.

的一個亞型,我們使用通配符的List類型參數,使其不必完全匹配。

相關問題