Как ссылка на метод реализует функциональный интерфейс?

interface StringFunc{
    String func(String n);
}

class MyStringOps{
    static String Reverse(String n) {
        String result="";
        for(int i=n.length()-1;0<=i;i--) {
            result+=n.charAt(i);
        }
        return result;
    }
}

class MethodRefDemo{
    static String Ops(StringFunc nn,String n) {
        return nn.func(n);
    }
    public static void main(String[] args) {
        //Как метод Reverse из класса MyStringOps реализует метод func из функционального интерфейса StringFunc
        System.out.println(Ops(MyStringOps::Reverse,"Настя дура"));
    }
}

Ответы (1 шт):

Автор решения: Сергей Бувака

Все что у вас написанно в классе MethodRefDemo является эквивалентом

class MethodRefDemo{
    static String Ops(StringFunc nn,String n) {
        return nn.func(n);
    }
    public static void main(String[] args) {
        System.out.println(Ops(new StringFunc() {
            @Override
            public String func(String n) {
                return MyStringOps.Reverse(n);
            }
        },"Настя дура"));
    }

Если вы используете Java 8+ то функциональный интерфейс ( интерфейс с 1 единственным методом) вы можете заменить это лямбдой. По сути это просто синтаксический сахар, чтоб уменьшеить количество шаблонного кода.

→ Ссылка