java8 lamda表達式

lamda表達式的引入主要是爲了解決匿名內部類的問題,比如:

      public interface func{
        public void method();
}

當我們有一個對象要調用func的方法,且func的對象只會在此處用一次,我們會這麼寫個匿名類:

      funcService.service(new func(){
    public void method(){
        System.out.println("hello");
    }
})

這樣太過於臃腫了。因此引入了lamda表達式。
要實現上面的功能,我們可以這麼寫

@FunctionalInterface
public interface func {
     void method();
}

public class Main {

    public static void main(String[] args) {
        func f=()-> System.out.println("hello");
        }

註解@FunctionalInterface表明這是一個函數式接口,只會擁有一個方法。該方法可以通過lamda表達式實現。
lamda表達式的形式如:
(s1)->{ 執行語句};
其實就是通過這個lamda表達式構造一個函數式接口的實現。而實現哪個函數式接口則通過上下文類型推斷。上面的例子是通過變量聲明推斷的,也可以通過返回值推斷,比如:

 public static func t1(){
        return ()-> System.out.println("hello");
    }
  public class Main {

    public static void main(String[] args) {
        t1().method();  
        }
        }

當然我們也可以在方法內部定義參數類型或者返回類型,比如:

@FunctionalInterface
public interface func<T,E> {
     E method(T t);
}
public class Main {

    public static void main(String[] args) {
      func<String,Integer> f=  (s1)->Integer.parseInt(s1);
        System.out.println(f.method("3"));
        System.out.println(f.method("3").getClass());
}
}

參考文章

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