SORU
25 Mart 2015, ÇARŞAMBA


Neden bu Java 8 lambda derlemek için başarısız mı?

Aşağıdaki Java kodunu derlemek için başarısız:

@FunctionalInterface
private interface BiConsumer<A, B> {
    void accept(A a, B b);
}

private static void takeBiConsumer(BiConsumer<String, String> bc) { }

public static void main(String[] args) {
    takeBiConsumer((String s1, String s2) -> new String("hi")); // OK
    takeBiConsumer((String s1, String s2) -> "hi"); // Error
}

Derleyici bildirildi

Error:(31, 58) java: incompatible types: bad return type in lambda expression
    java.lang.String cannot be converted to void

Tuhaf olan şey şu satırı "iyi derler, ama hat" Hata "başarısız olur. işaretli" OK işaretli. Aslında aynı görünüyor.

CEVAP
25 Mart 2015, ÇARŞAMBA


Senin lambda BiConsumer<String, String> ile uyumlu olması gerekir. Eğer JLS #15.27.3 (Type of a Lambda) başvurursanız:

Lambda ifadesi ise aşağıdakilerin tümü doğruysa, bir işlev türü ile uyumlu

  • [...]
  • Eğer fonksiyon türü sonuç geçersizdir, lambda vücudun her iki ifade bir ifade (§14,8'ken) veya void uyumlu bir bloktur.

Lambda deyimi ifade veya geçersiz uyumlu bir blok ya gerekir:

  • Yapıcı bir çağırma derler yani a statement expression.
  • Açıklama edebi bir ifade değil, bir dize ve geçersizdir uyumlu değil (cf. Derleme değil 7**).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EatingIn

    EatingIn

    12 EKİM 2013
  • KliptOut KwazeeKilla

    KliptOut Kwa

    24 ŞUBAT 2010
  • Mary Jane Tauyan

    Mary Jane Ta

    20 AĞUSTOS 2009