Java 8 新特性-Lambda表達式的理解和自己手寫簡單實例

Java 8 新特性 - lambda表達式理解的簡單實例

作用:

簡化了內部匿名類的寫法,通常回調都是以這種方式來實現。

可以使用lambda表達式接口舉例:
如:reids 的回調函數

package org.springframework.data.redis.core;

import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.lang.Nullable;

public interface RedisCallback<T> {
   @Nullable
   T doInRedis(RedisConnection connection) throws DataAccessException;
}

Runable接口:

package java.lang;

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

第一種方式:手寫實例展示

使用lambda表達式的條件是:接口,並且該接口只有一個抽象方法

抽象方法沒有參數的就以()-> 來表示

//單抽象方法的接口
public interface LambdaIntf{
    void test(String str);
}

//常規實現內部匿名接口的方法
public static void main(){
        public static void main(String[] args) {
        LambdaIntf i = new LambdaIntf() {
            @Override
            public void say(String str) {
                System.out.println( str);
            }
        };
        i.say("hello lambda");
    }
}

//lambda表達式
    public static void main(String[] args) {
        LambdaIntf i =(str)->{
            System.out.println(str);
        };
        i.say("hello lambda");
    }

LambdaIntf i =(str)->{System.out.println(str);};

兩點;省略了str的參數類型,系統可以自動推斷出來。省略了抽象方法的生命,直接寫方法體的內容


第二種方式:

以 Runablle 接口爲例:

public class TestLamb{

	 public static void main(String[] args) {
	    //調用下面的方法
        Thread t = new Thread(TestLamb::myrun);
        t.start();
     }

      //靜態方法,這種表示方式和 工具類的調用相似
      private static void myrun() {
        String name = Thread.currentThread().getName();
        try {
            Thread.currentThread().sleep(1000);
            System.out.println("完成");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
     }
    
}

常見錯誤:

lambda expression art not supported at language level ‘6’

我自己在運行的時候,出現這個錯誤。在 idea 中:

1.File – > project structure -->Project

project SDK(設置項目的jdk版本) : 一定選擇的是jdk1.8以上;

project language level :設置爲 8 -Lambdas ,type annitations etc. 的選項

2.File --> project structure --> Modules
source:設置language level 也爲 8 -Lambdas ,type annitations etc.

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