2012-12-07 21 views
15

Gelecek java 8 sürümünde JDK 1.8 ile oynuyorum.Java'da kuzu ve jenerikler 8

Ve kolayca

interface Foo { int method(); } 

yapmak ve sadece 3.

yazdırır

Foo foo =() -> 3; 
System.out.println("foo.method(); = " + foo.method()); 

gibi kullanabilirsiniz öğrendim Ve ben de bir java var olduğunu gördük. util.function.Fonksiyon daha genel bir şekilde yapar. Ancak bu kod

Function times3 = (Integer triple) -> 3 * triple; 
Integer twelve = times3.map(4); 

derlemek olmaz Ve ben ilk IntIntFunction adımı önlemek için başka bir yol varsa

interface IntIntFunction extends Function<Integer, Integer> {} 

IntIntFunction times3 = (Integer triple) -> 3 * triple; 
Integer twelve = times3.map(4); 

gibi bir şey Yani, merak ediyorum yapmak zorunda gibi görünüyor?

+6

'Eşleştirici times3'? –

+0

Tabii ki. Doh! –

+6

Şimdi jenerikleri anlamaya başladım, bunlar şu şekilde geliyor: - (... – SJuan76

cevap

5

@joop ve @edwin teşekkürler.

JDK 8'in son sürümüne dayanarak bunu yapmalıdır.

IntFunction<Integer> times3 = (Integer triple) -> 3 * triple; 

Ve durumda size Yani bir tür ya da parantez belirtmek gerekmez

IntFunction times3 = triple -> 3 * (Integer) triple; 

gibi bir şey ile biraz daha yumuşak yapabilir ancak döküm gerekir sevmiyorum eriştiğinizde parametre.

+0

Bekleyin.Alanın yapması nedir? Nesne olmak üçlüsünü alır mı? 'Integer' yerine, 'int' yerine – sehe

+0

sanırım (int) cast derleyecektir –

+0

IntFunction​​arasındaki fark nedirve İşlev ? – wensveen