Я изучаю лямбда-выражения и функциональные интерфейсы. Мы можем непосредственно написать реализацию интерфейса с помощью выражения лямбда. Поэтому я думаю, что это может быть альтернативой полиморфизму.
У меня есть код, использующий полиморфизм,
interface Drawable {
public void draw();
}
class Shape {
protected String name;
public Shape(String name) {
this.name = name;
}
}
class Rectangle extends Shape implements Drawable {
public Rectangle(String name) {
super(name);
}
@Override
public void draw() {
System.out.println("I am "+this.name);
System.out.println("Drawing rectangle with 2 equal sides.");
}
}
class Square extends Shape implements Drawable {
public Square(String name) {
super(name);
}
@Override
public void draw() {
System.out.println("I am "+this.name);
System.out.println("Drawing square with 4 equal sides.");
}
}
public class DrawShape {
public static void main(String ar[]) {
Drawable rectangle = new Rectangle("Rectangle");
rectangle.draw();
Drawable square = new Square("Square");
square.draw();
}
}
Я написал выше код, используя лямбда-выражения и функциональный интерфейс,
@FunctionalInterface
interface Drawable {
public void draw();
}
class Shape {
private String name;
public Shape(String name) {
this.name = name;
}
public void draw(Drawable d1) {
System.out.println("I am "+this.name);
d1.draw();
}
}
public class DrawShape {
public static void main(String[] args) {
Shape s1 = new Shape("Rectangle");
Drawable rectangle = () -> System.out.println("Drawing rectangle with 2 equal sides.");
s1.draw(rectangle);
Shape s2 = new Shape("Square");
Drawable sqaure = () -> System.out.println("Drawing square with 4 equal sides.");
s2.draw(sqaure);
}
}
Какой подход лучше? Как насчет других аспектов, таких как повторное использование кода, обслуживание и модификация кода, сцепление и сцепление и т.д. Для лямбда?