Не удается найти символ написанного метода java.util.function

у меня есть код вроде

public class Functionz {
    public static boolean test() {
        return true;
    }

    public static void main(String[] args) {
        Function[] funcs = new Function[] {test}; // and others
        for (Function func : funcs) {
            func();
        }
    }
}

и моя ошибка: cannot find symbol: test в строке с объявлением массива функций.

Надеюсь, это не глупый вопрос, очень новый для java, не новый для объектно-ориентированных языков, таких как python и C++.


person ChootsMagoots    schedule 21.09.2020    source источник


Ответы (1)


Function в Java принимает один параметр в качестве входных данных и один в качестве выходных.
Вы можете объявить тип параметра следующим образом: Function<Integer, String> — это функция, которая преобразует Integer в String
Ваш метод test() не принимает никаких входных данных. значение и выводит boolean, так что это Supplier.

import java.util.function.Supplier;

public class Main {
    public static boolean test() {
        System.out.println("lorem ipsum");
        return true;
    }

    public static void main(String[] args) {
        Supplier[] funcs = new Supplier[] {Main::test}; // and others
        for (Supplier func : funcs) {
            func.get();
        }
    }
}

Ваш код будет компилироваться, если для теста требуется один (и только один параметр), например

import java.util.function.Function;

public class Main {
    public static boolean test(String str) {
        System.out.println(str);
        return true;
    }

    public static void main(String[] args) {
        Function[] funcs = new Function[] {(Object anyObject) -> test(anyObject.toString())}; // and others
        for (Function func : funcs) {
            func.apply("lorem ipsum");
        }
    }
}

Вот список этих типов
Обратите внимание, что Function не вводит свои параметры при построении, потому что вы не можете создавать массивы с универсальным типом в Java (можно использовать в определенных случаях) => Используйте List, это поможет вам здесь

person IQbrod    schedule 21.09.2020