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

  • Dopelives

    Dopelives

    30 Temmuz 2009
  • Karan Thakur

    Karan Thakur

    23 HAZİRAN 2010
  • VJ VIMANA

    VJ VIMANA

    3 Mayıs 2007