В книге Шилдта приводится элементарный пример использования лямбда-выражения, где метод
double myMeth(){ return 98.6; }
заменяется
() -> 98.6;
Я так понимаю, что приводимый выше пример метода является частной реализацией, некого функционального интерфейса.
Я попытался запустить этот пример, но почему-то у меня данное значение не возвращается как double
, а выводится ссылка на объект экземпляра моего интерфейса. Что я делаю не так?
public interface FuncInterface {
double myMeth ();
}
и
public class Main {
public static void main(String[] args) {
FuncInterface n = () -> 98.6;
System.out.println(n);
}
}
Результат:
first.pack.Main$$Lambda$1/1418481495@87aac27
Спасибо!
В Вашем случае можно было просто воспользоваться Supplier
:
Supplier<Double> n = () -> 98.6;
System.out.println(n.get());
Supplier
- это тип функционального интерфейса, который предоставляет результат заданного типа, но при этом не принимает аргументов - в точности то, что нужно для Вашей функции double myMeth(){ return 98.6; }
.
И Вы также можете заглянуть в исходник этого интерфейса - аналог того, как должен выглядеть Ваш FuncInterface
, если Вы хотите реализовать его сами:
package java.util.function;
@FunctionalInterface
public interface Supplier<T> {
T get();
}
и, соответственно, результат получается аналогично n.get()
(для Supplier
) - n.myMeth()
(для FuncInterface
).
Вот так:
System.out.println(n.myMeth());
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Когда пытаюсь скомпилировать код, вижу такую ошибку: "Expected 3 arguments, but got 1" на мутод "refactorStudent" и "refactorInfo", подскажите как пофикситьДа и вообще,...
У меня есть на входе объект, как вернуть на выходе измененный объект на основе сущствующего?