java8常用新特性-方法引用

        ( 東西應該是有用的就是看用哪裏,怎麼樣了!高手在民間!)

         方法引用:是指通過方法的名字來指向一個方法。方法引用可以使語言的構造更緊湊簡潔,減少冗餘代碼;

方法引用的方式是使用一對冒號 :: 。方法引用結合Lambda  更愜意。

        方法引用分爲:構造器方法引用;靜態方法方法引用;特定類的方法引用;特定實例方法引用。

      1、構造器方法引用:

              語法是Class::new,或者更一般的Class< T >::new

       2、靜態方法引用:

               語法是Class::static_method

       3、類方法引用:

              語法是Class::method

        4、實例方法引用:

             語法是instance::method

例子:(類名隨意的)

 
//@FunctionalInterface
//  interface Supplier<T> {
//    T get();
//}

import com.oracle.webservices.internal.api.databinding.DatabindingMode;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

/***
 * 方法引用+lambda
 */
public class Java8Functional {

    public static void main(String[] args) {
        /***
         * 構造器引用:它的語法是Class::new,或者更一般的Class< T >::new
         */

        Cup cup = Cup.create(Cup::new);
        cup.setHigh(10);
        cup.setLength(10);
        cup.setWidth(5);
        List<Cup> cups = new ArrayList<Cup>();
        cups.add(cup);

        cups.forEach(System.out::println);
        /***
         * 靜態方法引用:它的語法是Class::static_method
         */
        Supplier<Cup> runCup = Cup::getCup;
        cups.add(runCup.get());
        System.out.println(runCup.get());
        cups.forEach(System.out::println);
/***
 * 特定類的任意對象的方法引用:它的語法是Class::method實例如下:
 */
        cups.forEach(Cup::c_method);
/***
 * 特定對象的方法引用:它的語法是instance::method實例如下
 */
        final    Cup cup2 = Cup.create(Cup::new);
        cup2.setHigh(2);
        cup2.setWidth(2);
        cup2.setLength(3);
        cups.add(cup2);
        cups.forEach(cup2::n_method);

    }

}


@Data
class Cup {

    private int high;
    private int width;
    private int length;

    /**
     * 構造器引用:
     */
    static Cup create(Supplier<Cup> cup) {
        //Supplier是jdk1.8的接口,這裏和lamda一起使用了
        System.out.println("create ,構造器引用" + cup.getClass().getName());
        return cup.get();
    }

    /****
     *靜態方法引用:它的語法是Class::static_method測試用
     */
    static Cup getCup() {

        Cup cup = Cup.create(Cup::new);
        cup.setWidth(8);
        cup.setLength(6);
        cup.setHigh(6);
        System.out.println("靜態方法引用:它的語法是Class::static_method");
        return cup;
    }

    /**
     * 特定類的任意對象的方法引用:它的語法是Class::method,測試用
     */
    void c_method()
    {
        System.out.println("特定類的任意對象的方法引用:語法是Class::method,"+this+"----"+this.getHigh());

    }
    /**
     * 特定對象的方法引用:它的語法是instance::method,測試用
     */
     void n_method(final  Cup cup)
    {
        System.out.println("特定對象方法引用:語法是instance::method,"+cup+"----"+cup.getHigh());

    }

}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章