JDK1.8之Lamda表达式(匿名内部类优化)

2019-01-14  本文已影响0人  秋笙fine

1.Lamda表达式的作用

例如一个匿名内部类的使用,使用Lamda表达式可以简化。

package TestDemo;
interface IMessage{
    public void print();
}

public class TestDemo{
public static void main(String[] args) {
    
    fun(()->System.out.println("Hello World!"));
    }
    public static void fun(IMessage msg){
        msg.print();
    }

}
package TestDemo;

interface IMessage{
    public void print();
}

public class TestDemo{
    
    public static void main(String[] args) {
        fun(new IMessage() {
        public void print(){
            System.out.println("Hello World!");
        }
        });

    }
    public static void fun(IMessage msg){
        msg.print();
    }

}

图一Lamda表达式和图二的匿名内部类明显是Lamda表达式更加简便。

Lamda就是为了解决匿名类形式过于复杂的作用。

2.Lamda表达式的语法形式:

(参数)->单行语句
(参数)->{多行语句};
(参数)->表达式

范例:观察有参的单行语句:

package TestDemo;

interface IMessage{
    public void print(String str);
}

public class TestDemo{
    
    public static void main(String[] args) {
        fun((s)->System.out.println(s));

    }
    public static void fun(IMessage msg){
        msg.print("Hello World");
    }

}

结果也能输出:


image.png
先说明一下,这里匿名内部类用到了接口回调(本质是方法多态性 这里的接口回调类似于Okhttp3里面,网络请求参数的填充),回调方法体就是Lamda表达式这里。

范例:观察多行语句

package TestDemo;

interface IMessage{
    public void print(String str);
}

public class TestDemo{
    
    public static void main(String[] args) {
        fun((s)->{
            s=s.toUpperCase();//转大写操作
            System.out.println(s);
        });

    }
    public static void fun(IMessage msg){
        msg.print("Hello World");
    }

}

转大写也成功了:


image.png

如果是一个表达式:

package TestDemo;

interface IMessage{
    public int add(int number1,int number2);
}

public class TestDemo{
    
    public static void main(String[] args) {
        fun((s1,s2)-> s1 + s2);//或者 fun((s1,s2)-> {return s1 + s2;});

    }
    public static void fun(IMessage msg){
        System.out.println(msg.add(10,20));
    }

}

结果:


image.png

总结:
利用Lamda表达式是对匿名内部类的复杂代码的优化。

上一篇 下一篇

猜你喜欢

热点阅读