Я смотрел и читал https://caveofprogramming.com/java/whats-new-in-java-8-lambda-expressions.html, и я слежу за тем же шаблоном, который я сделал для объекта runner, который отлично работает.
Runner runner = new Runner();
runner.run(() -> System.out.println("Print from Lambda expression"));
Затем я пытаюсь создать простой интерфейс и класс, чтобы применить то, что я узнал. Я просто хочу заменить анонимный класс выражением лямбда. Мое понимание - выражение лямбда - это более короткий код для анонимного класса и улучшенная читаемость.
Итак, я попытался инициировать другой экземпляр с именем eucalyptus1
и попытаться @Override
метод grow()
, но в сообщении об ошибке IDE сказано:
grow()
вcom.smith.Eucalyptus
не может быть применен к(lambda expression)
Может ли кто-нибудь указать мне, что я неправильно понял здесь?
Код ниже:
// a simple interface
interface Plant {
public void grow();
}
// apply interface to class
class Eucalyptus implements Plant {
@Override
public void grow() {
System.out.println("This is from Eucalyptus");
}
}
public class Main {
public static void main(String[] args) {
// Create an instance of Eucalyptus
Eucalyptus eucalyptus = new Eucalyptus();
eucalyptus.grow();
// Anonymous class Myrtle from Plant interface
Plant myrtle = new Plant() {
@Override
public void grow() {
System.out.println("This was running from anonymous class from Plant Interface");
}
};
myrtle.grow();
// Try to create a lambda expression from Plant interface
// and override grow() method
// by print ("This was running from Lambda expression")
// this won't work. why?
Eucalyptus eucalyptus1 = new Eucalyptus();
eucalyptus1.grow(() -> System.out.println("This from Lambda expression"));
}
}