Итог: - Вы должны предоставить реализацию интерфейса в определенный момент времени, чтобы использовать его.
Строкакода
MathOperation2 mo2 = Method_reference_demo::operate2
в недопустимом объявлении, поскольку подпись метода operate2
int operate2(int a, int b, int c, MathOperation2 obj)
предполагает, что MathOperation2
также будет передан методу.
Обратите внимание, что это может сработать, если вы измените сигнатуру для удаления последнего параметра, но это сделает его неэффективным, так как тогда лучше будет определить абстрактный метод самого интерфейса, который следует той же сигнатуре.
Я не могу изменить ни одну строку кода, кроме этих двух строк
Затем вы можете определить свой интерфейс следующим образом:
MathOperation2 mo2 = (a, b, c) -> {
return 0; // perform the operation with a, b and c here
};
System.out.println(mo2.operation2(2, 3, 4)); // just to print the output
например, чтобы добавить три целых числа, представление будет выглядеть следующим образом:
MathOperation2 mo2 = (a, b, c) -> a + b + c;
System.out.println(mo2.operation2(2, 3, 4)); // would print '9'
(из комментариев). С точки зрения ссылок на метод, пример будет выглядеть следующим образом:
private static int operate2(int a, int b, int c) { // <<-- notice the method signature
return a + b + c; // <<-- and a definition
}
private void Method_reference_demo01() {
MathOperation2 mo2 = Method_reference_demo::operate2;
System.out.println(mo2.operation2(2, 3, 4)); // prints '9'
}