Chciałem użyć funkcji lambda, aby zwrócić wartość i nie jestem w stanie tego samego. Dlaczego to nie działa?

public class Main
{
    public static void main(String[] args) {
        System.out.println(() -> {
            String s = "Akhilesh";
            return s;
        });
    }
}
0
mechanical_coder 21 marzec 2020, 07:18

2 odpowiedzi

Najlepsza odpowiedź

Druga odpowiedź zawierała wyjaśnienie, dlaczego to nie zadziała. Oto, jak możesz sprawić, by to działało. Mówiąc prościej, musisz dać Javie jakąś sugestię, w co powinna się zmienić lambda, inaczej się nie skompiluje. (Sugeruję zaakceptowanie ich odpowiedzi, ponieważ podaje ona rzeczywisty powód twojego problemu. Piszę to tylko dlatego, że mogę wczuć się w chęć wydrukowania wszystkiego podczas nauki języka Java i frustrację, która musiała się z tym wiązać).

import java.util.function.Supplier;
public class Main
{
    public static void main(String[] args) {
        // prints "Main$$Lambda$1/0x0000000801185840@38af3868"
        System.out.println((Supplier<String>) () -> {
            String s = "Akhilesh";
            return s;
        });

        Object obj = (Supplier<String>) () -> {
            String s = "Akhilesh";
            return s;
        };

        Supplier<String> supplier = () -> {
            String s = "Akhilesh";
            return s;
        };

        // prints "Main$$Lambda$2/0x0000000801186040@72ea2f77"
        System.out.println(obj);
        // prints "Main$$Lambda$3/0x0000000801186440@33c7353a"
        System.out.println(supplier);
        // prints "Akhilesh"
        System.out.println(supplier.get());
    }
}

Zobacz dokumentacja modułu java.util.function.

1
T Tse 21 marzec 2020, 04:50

Wyrażenie lambda to krótka ręka do anonimowej implementacji klasy interfejsu funkcjonalnego, więc możesz przekazać tylko wyrażenie lambda, które jest referencją interfejsu funkcjonalnego.

Istnieje przeciążenie println(), które zajmują int, float, ArrayList, HashMap, ale nie ma przeciążenia println(), które pobiera funkcjonalny interfejs jako dane wejściowe, więc nie możesz przekazać wyrażenia lambda.

1
Abra 21 marzec 2020, 04:25