java8新特性_::雙冒號


java8新特性_::雙冒號

來源:

方法引用通過方法的名字來指向一個方法。

方法引用可以使語言的構造更緊湊簡潔,減少冗余代碼。

方法引用使用一對冒號 :: 。

構造器引用

1.定義Supplier
@FunctionalInterface
public interface Supplier<T> {
    T get();
}
2.通過Supplier引用
    //Supplier是jdk1.8的接口,這里和lamda一起使用了
    public static Car create(final Supplier<Car> supplier) {
        return supplier.get();
    }
3.引用
final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );

靜態方法引用

方法是static的,name參數必須是循環對應的對象的

定義方法:
    /*方法必須是static的
    參數必須是循環的對象格式的
    參數不必須是是final,可以是final
    */
    public static void collide(Car car) {//
        System.out.println("Collided " + car.toString());
    }
調用
cars是一個list/數組等
    cars.forEach( Car::collide );

特定類的任意對象的方法引用

定義方法
    /*方法不是static時,不能有參數
    */
    public void repair() {
        System.out.println("Repaired " + this.toString());
    }
調用:
    cars.forEach( Car::repair );

特定對象的方法引用

對list中的某一個對象引用

    /*
    必須有參數,參數是遍歷的具體對象
     */
public void follow(Car another) {
        System.out.println("Following the " + another.toString());
    }
使用:
//對應的這個類必須是final的,否則所有的對象都可會調用這個方法
final Car police = Car.create( Car::new );
cars.forEach( police::follow );

lambda和雙:

public static void  printValur(String str){
    System.out.println("print value : "+str);
}
List<String> al = Arrays.asList("a","b","c","d");
  • 1.8以前的遍歷:
for (String a: al) {
    AcceptMethod.printValur(a);
}
  • lambda
al.forEach(x->{ AcceptMethod.printValur(x); });
  • 雙:
al.forEach(AcceptMethod::printValur);





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM