定義接口默認(rèn)實(shí)現(xiàn)
public interface Defaulable {
default String notRequired() {
return "Default implementation";
}
}
實(shí)現(xiàn)類1
public class DefaulableImpl implements Defaulable {
@Override
public String notRequired() {
return "Overridden implementation";
}
}
實(shí)現(xiàn)類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());
}
}
靜態(tài)方法調(diào)用
public class Car {
public static Car create( Supplier<Car>supplier){
return supplier.get();
}
//方法引用是靜態(tài)方法引用健爬,它的語法是Class::static_method。請注意這個(gè)方法接受一個(gè)Car類型的參數(shù)夫凸。
public static void getName(Car c){
System.out.println("寶馬");
}
}
List<Car> cars = Arrays.asList(car, car1);
//引用是靜態(tài)方法引用浑劳,它的語法是Class::static_method。請注意這個(gè)方法接受一個(gè)Car類型的參數(shù)夭拌。
cars.forEach(Car::getName);
//引用是特定類的任意對象的方法引用魔熏,它的語法是Class::method衷咽。請注意,這個(gè)方法沒有參數(shù)蒜绽。
cars.forEach(Car::repair);
//引用是特定對象的方法引用镶骗,它的語法是instance::method。請注意躲雅,這個(gè)方法接受一個(gè)Car類型的參數(shù)
Car police = Car.create( Car::new );
cars.forEach( police::follow );