2012-11-07 15 views
6

Kodumda List<Future<something>> birden çok örneğim var ve bunların tamamlanmasının beklemesini sağlayan tek bir yönteme sahip olmak istedim. Ama bana actual argument List<Future<Boolean>> cannot be converted to List<Future<?>>'u söyleyen bir derleyici istisnası alıyorum. , farklı yerlerde arandığında, yöntem parametresinde Liste <Future<?>> öğesini kullanamaz

Bu

yöntem başıdır:

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

ve bu denir nasıl:

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

bu List<Future<Map<String, String>>> ve birkaç diğer yanı için çalışmak gerekir.

+0

Liste > genişletir – nogard

+0

nogard: No. çalışmıyor. –

cevap

2

bunu kullanın: Future<Boolean> olarak

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

Future<?>

http://ideone.com/tFECPN

+0

Bunu, cevabımdan daha çok beğendim, orijinali sildim. Teşekkür ederim. –

+0

"Gelecek , Future uzantısı değil" ne demek oluyor? 'Kamu uzanır> hükümsüz waitForIt (Liste params): idi başvuruldu cevap:' Gelecek 'Geleceğin' bir alt tipi 'gelecek okuyucular için – newacct

+0

olduğunu ' –

3

bunu kullanın uzantısı değildir:

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

Eğer List<A> vevar, A ve B, ile tam olarak eşleşmelidir. Future<Boolean> tam olarak Future<?> ile aynı olmadığından, çalışmaz.

Future<Boolean>, Future<?>'un bir alt türüdür, ancak bu yeterli değildir. List<A> A tam olarak aynı olması kalmaması Biz List tipi parametresinde bir joker kullanmak B.

bir alt tipi olsa bile List<B> bir alt tür değil.

İlgili konular