Java8--方法引用

方法引用:使用::分隔符實現方法引用

對Lambda表達式不熟悉的可以看這https://blog.csdn.net/wuud__/article/details/104703443

可以使用方法引用的情況:

  • (args) -> ClassName.staticMethod(args)可以簡化爲:ClassName::staticMethod。函數式接口內方法的參數與要引用方法的參數完全一致
  • (arg,rest) -> arg.instanceMethod(rest)可以簡化爲:ClassName::instanceMethod。arg是ClassName類型。例:
(list,element) -> list.contains(element);
簡化爲:List::contains;
  • (args) -> expr.instanceMethod(args)簡化爲expr::instanceMethod。

具體使用:

  • Lambda表達式調用類靜態方法
@FunctionalInterface
public interface FunctionalInterfaceTest {
	void add(String s);
}
public class LambdaTest {
public static void print(String s) {
		System.out.println("類靜態方法:"+s);
	}
	public static void main(String[] args) {
		FunctionalInterfaceTest fit = (s) -> {
			LambdaTest.print(s); // 調用類靜態方法
		};
		fit.add("sss");
    // 簡介寫法
    FunctionalInterfaceTest fit = s -> LambdaTest.print(s);
    // 還可更簡潔,使用<類名::類方法>格式
    FunctionalInterfaceTest fit = LambdaTest::print; // 需要類方法的參數個數與函數式接口的參數個數相同
	}
}
  • 使用Lambda表達式調用實例方法的格式與調用類方法的格式相同
LambdaTest lt =new LambdaTest();
FunctionalInterfaceTest fit = lt::s; // 格式爲<實例::實例方法>

public void s(String s1,String s2) {
	System.out.println("實例方法"+s1+s2);
}

構造方法引用:

  • 無參構造,可以利用Supplier接口實現,因爲Supplier接口的抽象方法無需參數。
Supplier<Apple> s = Apple::new; 
Apple a = s.get();
  • 一個參數的構造方法,可以使用Function接口實現。Function只需一個參數,剛好對應。
public Apple(Integer weight){
    this.weight = weight;
}
Function<Integer,Apple> f = Apple::new;
Apple a = f.apply();
  • 對應兩個參數的可以使用BiFunction,兩個以上可以自定義函數式接口。用法相同。

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