jdk1.8 -- 方法推导 静态方法、实例方法、构造方法推导

一.静态方法的推导

public class MainTest {
    
    public static void main(String[] args) {
        
        // 正常情况下我们需要通过写一个consumer的方法来调用
        testConsumer("abc",(s)->System.out.println(s));
        System.out.println("=====================");

     //但是我们只是将一个内容输入,没必要这么麻烦,jdk1.8 已经为我们考虑到这样的写法
        testConsumer("abc",System.out::println);
        //语法:
        //    ContainingClass::staticMethodName 
} 
    public static void testConsumer(String s,Consumer<String> c){ 
         c.accept(s);
    }
}

二.实例方法推导

public class MainTest {
    
    public static void main(String[] args) {
          
        //2.实例方法的推导
     // 通常情况我们要获取一个字符串的值应该这样获取
        String value = "123";
        String valueOf1 = String.valueOf(value);
        System.out.println("======== valueOf1 ====== "+valueOf1);
        //通过lambda 表达式可知,这其实就是一个FunctionInterface,而在jdk1.8中定义了特殊的写法
        // 语法:
        //     containingObject::instanceMethodName 
        Function<String,String> f = String::valueOf;
        System.out.println("======== valueOf 2 ====== "+f.apply("123"));
         
    }
}

三.构造函数推导

public class MainTest {
    
    
    public static void main(String[] args) {
        
        //3.构造函数推导
                
        //3.1通常情况我们可以通过lambda推导来创建一个对象
        testConstruct("red", 100,(s,w)->new Apple(s,w));
        
        //3.2在jdk1.8 的lambda 中写法如下
        BiFunction<String,Long,Apple> fApple  = Apple::new;
        fApple.apply("red", 100L);
        
        //总结:构造函数其实就是一个静态方法而已,只不过是特殊的一个方法,为什么 new 一个对象还要这么麻烦
        //      我们通过这种写法可以在jdk1.8后面的应用中可以更加的快捷和方便
    }
    public static Apple testConstruct(String color,long weight,BiFunction<String,Long,Apple> f){
        return f.apply(color,weight);
    }
}

 

posted @ 2019-05-28 09:52  硝烟漫过十八岁  阅读(398)  评论(0编辑  收藏  举报