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ş:
Neden Java bize bir isim dosya adından...
Neden char[] şifreler için Dize Java t...
Neden bitişik in Java daha hızlı geçiş...
Eclipse hata: '' Java Sanal M...
Neden C# birbirleri ile iki nesne türl...