Я думаю, что два примера объяснят это, во-первых, вы хотели, чтобы поставщик содержательной строки печатал. Например,
Supplier<String> newString = () -> "test";
System.out.println(newString.get());
То, что вы предоставили , было пустой строкой. Например,
System.out.println(new String());
Совершенно верно создать пустую строку, даже если результат отклонился от ваших ожиданий.
Бонус третий пример, чтобы уточнить первый Например, в лямбда-выражении вы фактически реализуете единственный абстрактный метод из функционального интерфейса, в частности Supplier<T>
. Мол,
Supplier<String> newString = new Supplier<String>() {
@Override
public String get() {
return "test"; // originally return new String()
}
};
System.out.println(newString.get());