Как ссылка на метод реализует функциональный интерфейс?
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 единственным методом) вы можете заменить это лямбдой. По сути это просто синтаксический сахар, чтоб уменьшеить количество шаблонного кода.