在本教程中,介绍了关于学习java8版本中的方法引用 。
什么是java8中的方法引用?
Method reference 方法引用允许开发者通过它们的名字来调用一个方法或构造函数。
它是编写lambda表达式的另一种简短方式。它使用符号:: ,将类/对象/构造函数与方法名称分开。
有时,我们会收到 "此表达式的目标类型必须是一个功能接口"这样的编译时警告,所以这个错误是因为需要将方法引用或lambda表达式分配给一个功能接口。
这里有一个method reference syntax :
Classname:: methodname
Instancename:: methodname
Constructorname::new
介绍了各种类型的方法引用:
- 静态方法引用
- 实例方法引用
- 构造函数引用
静态方法引用实例 java8
静态方法是全局性的,它们可以直接使用java8的Classname.staticmethod()来调用,例如,你可以使用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;
}
}
上述代码的执行结果:
true
false
true
false
java8中实例方法的引用实例
实例方法对一个类的实例起作用。在java8之前,我们经常使用java8的new class().method name来调用实例方法。例如,你可以调用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));
}
}
输出:
6
java8结构参考示例
Construction reference 可以使用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);
}
}
输出:
Hello
结论
学习了带有静态构造器和实例语法的方法引用的例子