天天看點

java8新特性:lambda表達式,使用lambda表達式實作Runnable接口java8新特性:lambda表達式,使用lambda表達式實作Runnable接口

java8新特性:lambda表達式,使用lambda表達式實作Runnable接口

1.使用lambda表達式實作interface接口

1.1、當一個接口隻有一個方法時,可以使用lambda表達式實作這個接口。

1.2、當方法中隻有一條語句時,可以不寫大括号

1.3、方法中超過一條語句時,需要寫大括号

interface Animal{
	void play();
}
Animal animal = ()->{System.out.print("hello");}//當一個接口隻有一個方法時,可以使用lambda表達式實作這個接口。


Animal animal2 = ()-> System.out.println();//當隻有一條語句時,可以不寫大括号
Animal animal3 = ()->{
	int count = 1 + 1;
	System.out.print(count);
}
           

2.使用lambda表達式實作Runnable接口

Runnable runnable = ()->{
            System.out.println("hello");
        };//這裡的()實作的是run()方法
           

3.使用lambda表達式啟動一個Thread線程

不用lambda表達式的實作:

new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello");
            }
        }).start();
           

使用lambda表達式的實作:

new Thread(()->{
            System.out.println("hello");
        }).start();
           

這裡為什麼可以隻寫()->{}表示Runnable?因為Thread的構造方法中需要放一個Runnable類型的參數,然而()->{}這個lambda表達式就代表了一個Runnable,将它們拆分開就是下面這種寫法:

Runnable runnable = ()->{
            System.out.println("hello");
        };

new Thread(runnable).start;
           

是以我們可以将它們合在一起寫,于是就變成了:

new Thread(()->{
            System.out.println("hello");
        }).start();
           

############# 跑題了,回到主題。########

4.當一個方法隻有return語句時,可以省略大括号和return

interface Animal{
    String say();
}

Animal animal = ()->"hello";
           

5.當方法隻有一個參數時,可以省略括号,不需要寫參數修飾符(注意,這裡指可以省略參數的小括号)

interface Animal{
    void say(String voice);
}
Animal animal = voice -> System.out.println(voice);
           

6.方法有參數個數超過一個,不能省略小括号

interface Animal{
    void say(String voice,int num);
}
Animal animal = (voice,num) -> System.out.println(voice+"-->"+num);