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,两个以上可以自定义函数式接口。用法相同。

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