• Какие возможности современная Java предоставляет по эмуляции делегатов .NET?

    @avpmk
    В Java 8 есть (в 2012 уже были (может и раньше не знаю)) лямбды, функциональные интерфейсы и указатели на методы (method reference).
    Присваиваете функциональному интерфейсу (любому интерфейсу у которого только один абстрактный метод) лямбда выражение или methodReference c подходящей сигнатурой, другой код вызывает этот единственный метод..

    Напримерно так:

    java 8 (instance method)
    Block<String> aFunctionalInterface = System.out::println;
    Arrays.asList("А", "B", "C", "D", "E").forEach(aFunctionalInterface);
    
    Predicate<String> p = "Строка"::equalsIgnoreCase;
    System.out.println(p.test("СТРОКА"));
    System.out.println(p.test("строкА"));
    System.out.println(p.test("Другая строка"));

    java 8 (static method)
    System.out.println(
        Arrays.asList("А", "Bb", "Ccc", "Ddddddddddddd", "Eeee")
        .stream()
        .map(s -> s.length())
        .reduce(Math::max)
        .get()
    );
    Ответ написан
    Комментировать