Java: использование void с функциейи потребитель <T> - PullRequest
0 голосов
/ 30 октября 2019

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

В следующем примере кода, если я раскомментирую methodRef2 и methodRef4, я получаю синтаксические ошибки.

import java.util.function.Function;
import java.util.function.Consumer;

public class StackOverflowExample {
    public static void main(String[] args) {
        Function<Integer, Integer> methodRef1 = StackOverflowExample::inIntegerOutInteger;
        methodRef1.apply(1000);

        //      Function<void, Integer> methodRef2 = StackOverflowExample::inVoidOutInteger;
        //      methodRef2.apply();

        Consumer<Integer> methodRef3 = StackOverflowExample::inIntegerOutVoid;
        methodRef3.accept(45);

        //      Consumer<void> methodRef4 = StackOverflowExample::inVoidOutVoid;
        //      methodRef4.accept();
    }

    protected static int inIntegerOutInteger(int i) {
        System.out.println("inIntegerOutInteger invoked with value " + i);
        return i;
    }


    protected static void inIntegerOutVoid(int i) {
        System.out.println("inIntegerOutVoid invoked with value " + i);
    }


    protected static int inVoidOutInteger() {
        int retVal = 1000;
        System.out.println("inVoidOutInteger invoked: returning value " + retVal);
        return retVal;
    }


    protected static void inVoidOutVoid() {
        System.out.println("inVoidOutVoid invoked");
    }

}

1 Ответ

2 голосов
/ 30 октября 2019

Ваш methodRef2 должен иметь тип Supplier:

Supplier<Integer> methodRef2 = StackOverflowExample::inVoidOutInteger;
methodRef2.get();

и methodRef4 должен иметь тип Runnable:

Runnable methodRef4 = StackOverflowExample::inVoidOutVoid;
methodRef4.run();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...