В книге Шилдта приводится элементарный пример использования лямбда-выражения, где метод
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());
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости