Java 8インタフェースの新しい実装方式

1811 ワード

インタフェースのデフォルト実装の定義
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( Suppliersupplier){
        return supplier.get();
    }
    //           ,     Class::static_method。           Car     。
    public static void getName(Car c){
        System.out.println("  ");
    }
}


    List 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 );