定义接口默认实现
public interface Defaulable {
default String notRequired() {
return "Default implementation";
}
}
实现类1
public class DefaulableImpl implements Defaulable {
@Override
public String notRequired() {
return "Overridden implementation";
}
}
实现类2
public class DefaulableImpl2 implements Defaulable {
@Override
public String notRequired() {
return "Overridden implementation2";
}
}
工厂方法
public interface DefaulableFactory {
static Defaulable create(Supplier< Defaulable > supplier){
return supplier.get();
}
}
public class DefaulableTest {
public static void main(String[] args) {
Defaulable defaulable=DefaulableFactory.create(DefaulableImpl::new);
System.out.println(defaulable.notRequired());
Defaulable defaulable1=DefaulableFactory.create(DefaulableImpl2::new);
System.out.println(defaulable1.notRequired());
}
}
静态方法调用
public class Car {
public static Car create( Supplier<Car>supplier){
return supplier.get();
}
//方法引用是静态方法引用,它的语法是Class::static_method。请注意这个方法接受一个Car类型的参数。
public static void getName(Car c){
System.out.println("宝马");
}
}
List<Car> cars = Arrays.asList(car, car1);
//引用是静态方法引用,它的语法是Class::static_method。请注意这个方法接受一个Car类型的参数。
cars.forEach(Car::getName);
//引用是特定类的任意对象的方法引用,它的语法是Class::method。请注意,这个方法没有参数。
cars.forEach(Car::repair);
//引用是特定对象的方法引用,它的语法是instance::method。请注意,这个方法接受一个Car类型的参数
Car police = Car.create( Car::new );
cars.forEach( police::follow );