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

    }

}

 

 

 

 

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