什么是Java方法引用?
Java方法引用是一种新的语言特性,它可以让你在Lambda表达式中直接引用一个方法,无需再次定义特定的Lambda表达式。它是一种更加简洁、优雅的实现方式,并且可以让代码更加易于理解,减少冗余代码的编写。
如何使用Java方法引用?
Java方法引用的使用步骤非常简单。首先,你需要有一个方法可以被引用,并且你需要定义一个函数式接口。接下来,你可以在Lambda表达式中添加一个“::”的操作符,然后添加需要引用的方法名。最后,你可以传递这个Lambda表达式给函数式接口。接下来我们来看一个例子:
//定义一个函数式接口
interface MethodInterface {
void printHello();
}
//定义一个可以被引用的方法
public class methodReference {
public static void printMethod() {
System.out.println("Hello World!");
}
public static void main(String[] args) {
//使用方法引用来传递Lambda表达式
MethodInterface methodInterface = methodReference::printMethod;
methodInterface.printHello();
}
}
在这个例子中,我们首先定义了一个函数式接口MethodInterface和一个可以被引用的方法printMethod。然后我们使用方法引用的语法,将printMethod方法引用传递给MethodInterface。接下来,我们调用printHello方法,就会直接调用printMethod方法。
Java方法引用的四种使用方式
Java方法引用有四种使用方式:
- 类名::静态方法
- 引用名::实例方法
- 类名::实例方法
- 类名::new
我们来一一讲解一下:
1. 类名::静态方法:这种方式用来引用静态方法。
//定义一个函数式接口
interface StaticMethodInterface {
int getMax(int a, int b);
}
public class methodReference {
//定义一个静态方法
public static int max(int a, int b) {
return a > b ? a : b;
}
public static void main(String[] args) {
StaticMethodInterface staticMethodInterface = methodReference::max;
System.out.println(staticMethodInterface.getMax(2, 5));
}
}
2. 引用名::实例方法:用来引用该对象的任意实例方法。需要注意的是,这个方法的参数类型需要与定义Lambda表达式的函数式接口中的参数类型保持一致。
//定义一个函数式接口
interface InstanceMethodInterface {
int getLength(String str);
}
public class methodReference {
public static void main(String[] args) {
String str = "Hello World!";
InstanceMethodInterface instanceMethodInterface = str::length;
System.out.println(instanceMethodInterface.getLength(str));
}
}
3. 类名::实例方法:这种方式与第二种方式类似,只是该方法的参数列表的第一个参数是实例方法的调用者。
//定义一个函数式接口
interface ClassInstanceMethodInterface {
boolean isContain(String str, CharSequence cs);
}
public class methodReference {
public static void main(String[] args) {
String str = "Hello World!";
ClassInstanceMethodInterface classInstanceMethodInterface = String::contains;
System.out.println(classInstanceMethodInterface.isContain(str, "World"));
}
}
4. 类名::new:这种方式用来引用构造器,并且要求与定义Lambda表达式的函数式接口兼容。
//定义一个函数式接口
interface NewInterface {
HelloWorldInterface sayHelloWorld(String msg);
}
//定义一个接口
interface HelloWorldInterface {
void sayHelloWorld();
}
public class methodReference {
public static void main(String[] args) {
//使用方法引用引用构造器
NewInterface newInterface = HelloWorld::new;
HelloWorldInterface helloWorldInterface = newInterface.sayHelloWorld("Hello World!");
helloWorldInterface.sayHelloWorld();
}
}
class HelloWorld implements HelloWorldInterface {
private String msg;
public HelloWorld(String msg) {
this.msg = msg;
}
@Override
public void sayHelloWorld() {
System.out.println(msg);
}
}
在这个例子中,我们定义了一个函数式接口NewInterface和一个接口HelloWorldInterface和一个实现HelloWorldInterface的HelloWorld类。然后我们使用方法引用引用构造器,将NewInterface和HelloWorld连接起来,从而也就实现了对于构造器的引用。
本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/javao4w.html
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!