Java8 - 方法引用参考教程与实例

164 阅读1分钟

方法引用基础知识

java在java8版本中引入了方法引用。方法引用允许开发者通过它们的名字来调用一个方法或构造器。方法引用是编写lambda表达式的另一种简短方式。方法引用使用符号":: "将类/对象/构造函数与方法名称分开,有时我们会收到编译时的警告,如 "此表达式的目标类型必须是一个功能接口",所以这个错误是因为需要将方法引用或lambda表达式分配给功能接口

方法引用的语法

Classname:: methodname  
Instancename:: methodname  
Constructorname::new  

介绍了各种类型的方法引用:

  • 静态方法引用
  • 实例方法引用
  • 构造函数引用

静态方法引用的例子

静态方法对类来说是全局性的,它们可以直接使用Classname.staticmethod()与java8进行调用,你可以使用Classname::static-method进行调用。

public class MethodReferenceExample {  
  
 public static void main(String[] args) {  
  // Using lambda expression  
  BooleanTest lambdaExample = (n) -> PositiveNumberCheck.isPositive(n);  
  System.out.println(lambdaExample.test(2));  
  System.out.println(lambdaExample.test(-2));  
  
  // Using method reference  
  BooleanTest methodRefExample = PositiveNumberCheck::isPositive;  
  System.out.println(methodRefExample.test(2));  
  System.out.println(methodRefExample.test(-2));  
 }  
}  
  
@FunctionalInterface  
interface BooleanTest {  
 boolean test(int n);  
}  
class PositiveNumberCheck {  
 public static boolean isPositive(int n) {  
  return n >= 0;  
 }  
}  

实例方法引用示例

实例方法对一个类的实例起作用。在java8之前,我们使用new class()来调用实例方法。 使用java8的方法名称,你可以调用object:: instance-method

import java.util.function.Function;  
public class MethodReferenceExample {  
 public Integer IncrementByOne(Integer value) {  
  return value + 1;  
 }  
 public static void main(String[] args) {  
  Function function = new MethodReferenceExample()::IncrementByOne;  
  System.out.println(function.apply(5));  
 }  
}  

构造引用的例子

构造引用可以使用new操作符来调用。对构造的引用是通过功能接口来执行的 下面是一个构造引用的例子

import java.util.function.Consumer;  
public class MethodReferenceExample {  
  
 public static void main(String[] args) {  
  Consumer function = Emp::new;  
  function.accept("Hello");  
 }  
}  
class Emp {  
 Emp(String msg) {  
  System.out.print(msg);  
 }  
}