2013-03-27 24 views
13

Java 8 features hakkında bir şeyler okuyordum ve yöntem referanslarına sahip olduklarını gördüm, ancak yöntem aşırı yüklendiğinde hangi yöntemin nasıl belirtileceğini görmedim. Kimse biliyor mu?Boş olmayan bağımsız değişkenler için yöntem başvuruları?

+0

Fonksiyonel arayüzler için lambda ifadeleri kısaltmalar olduğundan, yöntemin türü arayüzdeki yöntemden kötüye kullanılabilir olmalıdır. –

+0

@ LeonardBrünings: Bu lambda ifadelerine değil, farklı olan yöntem referanslarına işaret ediyor. Bir lambda ifadesi, bir fonksiyonun bir uygulamasıdır; Bir yöntem referansı, önceden varolan bir sınıftan önceden varolan bir yönteme yapılan bir referanstır. –

+0

@LouisWasserman Bağlandığım makaleye göre, yöntem referansları lambda olarak benim etiketim olarak uygulanacak. – ArtB

cevap

5

:

lambda ifadeleri kullanılabilir? hedef türü uygun parametresinin türü olduğu

  • yöntem ya da yapıcı argümanlar. Yöntem veya yapıcı aşırı yüklendiyse, olağan aşırı yükleme mekanizmaları, lambda ifadesinin hedef türle eşleşmesinden önce kullanılır. (Aşırı yük çözünürlüğünden sonra, , aynı imzası ile aynı işlevsel arayüzleri aynı işlevsel tanımlayıcılarla kabul eden birden fazla eşleştirme yöntemi veya kurucu olabilir. Bu durumda, lambda ifadesi, bu işlevsel arabirimlerden birinin türüne döküm olmalıdır.) ; Hedef türünü açıkça sağlayan cast ifadeleri.

  • Örneğin:

Object o =() -> { System.out.println("hi"); };  // Illegal: could be Runnable or Callable (amongst others) 
Object o = (Runnable)() -> { System.out.println("hi"); }; // Legal because disambiguated 

Yani, belirsiz imzalar varsa bunu döküm gerekir.

6

Derleyici, yöntem imzasını fonksiyonel arabirim ile eşleştirecektir.

Integer foo(){...} 

Integer foo(Number x){...} 

Supplier<Number>   f1 = this::foo; //()->Number, matching the 1st foo 

Function<Integer, Number> f2 = this::foo; // Int->Number, matching the 2nd foo 

Esasen, f2 bir Integer kabul edip bir Number dönebilirsiniz şeydir, derleyici 2 foo() gereksinimi karşıladığını öğrenebilirsiniz. this Lambda FAQ itibaren

İlgili konular