Могу ли я использовать лямбда-функции для возврата чего-либо? - PullRequest
0 голосов
/ 21 марта 2020

Я хотел использовать лямбда-функцию для возврата значения, и я не могу так же. Почему это не работает?

public class Main
{
    public static void main(String[] args) {
        System.out.println(() -> {
            String s = "Akhilesh";
            return s;
        });
    }
}

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Другой ответ дал объяснение , почему это не сработает. Вот как вы можете заставить это работать. Проще говоря, вы должны дать Java некоторое предположение относительно того, во что должна превратиться лямбда, иначе она не будет компилироваться. (Я предлагаю принять их ответ, поскольку он дает реальную причину вашей проблемы. Я публикую это только потому, что могу сочувствовать желанию распечатать все, когда узнаю что-нибудь Java и разочарование, которое, должно быть, пришло.)

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());
    }
}

См. документацию для java .util.function module .

1 голос
/ 21 марта 2020

Лямбда-выражение является сокращением для реализации функционального интерфейса анонимным классом, поэтому вы можете передавать только лямбда-выражение, где ссылка на функциональный интерфейс.

Есть перегрузка println(), которая принимает int, float, ArrayList, HashMap, но нет перегрузки для println(), который принимает функциональный интерфейс в качестве входа, поэтому вы не можете передать лямбда-выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...