Как использовать функцию как параметр java

Аватар пользователя Сергей Якимович
Сергей Якимович
21 декабря 2022

Передать метод в качестве параметра можно разными способами. Рассмотрим некоторые из них.

1) Воспользуемся готовым функциональным интерфейсом UnaryOperator :

    public static void superMethod(UnaryOperator<String> method) {
        String str = "Hexlet";
        String result = method.apply(str);
        System.out.println(result);
    }

// вызов с передачей методов
public class App {
    public static void main(String[] args) throws Exception {
        // передадим стандартный метод
        superMethod(String::toUpperCase); // => HEXLET
        // передадим лямбда-функцию
        superMethod(s -> s + "!"); // => hexlet!
        // передадим собственный метод
        superMethod(App::reverse);  // => telxeh
    }

    public static String reverse(String str) {
        StringBuilder builder = new StringBuilder();
        builder.append(str);
        return builder.reverse().toString();
    }
}

2) Создадим собственный интерфейс и передадим объект этого типа в нашу функцию :

    interface MyInterface {
        int count(int a, int b, int c);
    }

    public static void superMethodInterface(MyInterface method) {
        int a = 5, b = 10, c = 20;
        int result = method.count(a, b, c);
        System.out.println(result);
    }

// вызов с передачей методов
public class App {
    public static void main(String[] args) throws Exception {
        MyInterface count = new MyInterface() {
            @Override
            public int count(int a, int b, int c) {
                return a + b + c;
            }
        };
        superMethodInterface(count); // => 35
        superMethodInterface((a,b,c) -> a * b * c); // => 1000
        superMethodInterface((a,b,c) -> a + b - c); // => -5
    }

3) Получим метод с помощью рефлексии и передадим его :

    public static void superMethodReflection(Object object, Method method) throws Exception {
        int a = 10;
        int b = 20;
        int result = (int) method.invoke(object, a, b);
        System.out.println(result);
    }
// вызов с передачей методов
public class App {
    public static void main(String[] args) throws Exception {
        // передадим стандартный метод
        Method method = Integer.class.getDeclaredMethod("max", int.class, int.class);
        superMethodReflection(0, method); // => 20
        method = Integer.class.getDeclaredMethod("sum", int.class, int.class);
        superMethodReflection(0, method); // => 30
        // передадим собственный метод
        method = App.class.getDeclaredMethod("concate", int.class, int.class);
        superMethodReflection(new App(), method); // => 1020
    }

    public static int concate(int a, int b) {
        return Integer.parseInt("" + a + b);
    }
}
0 0
Основы Java за 14 дней
  • 62 урока в онлайн-тренажере
  • 4 живых вебинара и масскодинг
  • Помощь наставника на весь период обучения

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки