本文概述
- 方法引用的类型
- 1)引用静态方法
- 2)引用实例方法
- 3)引用构造函数
方法引用的类型 java中有以下几种类型的方法引用:
- 引用静态方法。
- 引用实例方法。
- 引用构造函数。
文章图片
1)引用静态方法 你可以引用类中定义的静态方法。以下是描述Java中引用静态方法的过程的语法和示例。
句法
ContainingClass::staticMethodName
例子1
在以下示例中, 我们定义了一个函数接口, 并将静态方法引用为其函数方法say()。
interface Sayable{
void say();
}
public class MethodReference {
public static void saySomething(){
System.out.println("Hello, this is static method.");
}
public static void main(String[] args) {
// Referring static method
Sayable sayable = MethodReference::saySomething;
// Calling interface method
sayable.say();
}
}
立即测试
输出:
Hello, this is static method.
例子2
在下面的示例中, 我们使用预定义的功能接口Runnable引用静态方法。
public class MethodReference2 {
public static void ThreadStatus(){
System.out.println("Thread is running...");
}
public static void main(String[] args) {
Thread t2=new Thread(MethodReference2::ThreadStatus);
t2.start();
}
}
立即测试
输出:
Thread is running...
例子3
你还可以使用预定义的功能接口来引用方法。在下面的示例中, 我们使用BiFunction接口并使用了apply()方法。
import java.util.function.BiFunction;
class Arithmetic{
public static int add(int a, int b){
return a+b;
}
}
public class MethodReference3 {
public static void main(String[] args) {
BiFunction<
Integer, Integer, Integer>
adder = Arithmetic::add;
int result = adder.apply(10, 20);
System.out.println(result);
}
}
立即测试
输出:
30
例子4
你也可以通过引用方法来覆盖静态方法。在下面的示例中, 我们定义并重载了三种添加方法。
import java.util.function.BiFunction;
class Arithmetic{
public static int add(int a, int b){
return a+b;
}
public static float add(int a, float b){
return a+b;
}
public static float add(float a, float b){
return a+b;
}
}
public class MethodReference4 {
public static void main(String[] args) {
BiFunction<
Integer, Integer, Integer>
adder1 = Arithmetic::add;
BiFunction<
Integer, Float, Float>
adder2 = Arithmetic::add;
BiFunction<
Float, Float, Float>
adder3 = Arithmetic::add;
int result1 = adder1.apply(10, 20);
float result2 = adder2.apply(10, 20.0f);
float result3 = adder3.apply(10.0f, 20.0f);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
}
立即测试
输出:
30
30.0
30.0
2)引用实例方法 像静态方法一样, 你也可以引用实例方法。在下面的示例中, 我们描述了引用实例方法的过程。
句法
containingObject::instanceMethodName
例子1
在以下示例中, 我们引用了非静态方法。你可以按类对象和匿名对象引用方法。
interface Sayable{
void say();
}
public class InstanceMethodReference {
public void saySomething(){
System.out.println("Hello, this is non-static method.");
}
public static void main(String[] args) {
InstanceMethodReference methodReference = new InstanceMethodReference();
// Creating object
// Referring non-static method using reference
Sayable sayable = methodReference::saySomething;
// Calling interface method
sayable.say();
// Referring non-static method using anonymous object
Sayable sayable2 = new InstanceMethodReference()::saySomething;
// You can use anonymous object also
// Calling interface method
sayable2.say();
}
}
立即测试
输出:
Hello, this is non-static method.
Hello, this is non-static method.
例子2
【Java方法引用】在下面的示例中, 我们引用实例(非静态)方法。可运行接口仅包含一种抽象方法。因此, 我们可以将其用作功能接口。
public class InstanceMethodReference2 {
public void printnMsg(){
System.out.println("Hello, this is instance method");
}
public static void main(String[] args) {
Thread t2=new Thread(new InstanceMethodReference2()::printnMsg);
t2.start();
}
}
立即测试
输出:
Hello, this is instance method
例子3
在下面的示例中, 我们使用BiFunction接口。它是一个预定义的接口, 包含一个功能方法apply()。在这里, 我们将添加方法称为应用方法。
import java.util.function.BiFunction;
class Arithmetic{
public int add(int a, int b){
return a+b;
}
}
public class InstanceMethodReference3 {
public static void main(String[] args) {
BiFunction<
Integer, Integer, Integer>
adder = new Arithmetic()::add;
int result = adder.apply(10, 20);
System.out.println(result);
}
}
立即测试
输出:
30
3)引用构造函数 你可以使用new关键字引用构造函数。在这里, 我们借助功能接口来引用构造函数。
句法
ClassName::new
例
interface Messageable{
Message getMessage(String msg);
}
class Message{
Message(String msg){
System.out.print(msg);
}
}
public class ConstructorReference {
public static void main(String[] args) {
Messageable hello = Message::new;
hello.getMessage("Hello");
}
}
立即测试
输出:
Hello
推荐阅读
- Java可选类
- Java 8 JDBC改进
- Java 8方法参数映射
- Android Fingerprint系列之google原生界面
- Android6.0------权限申请~easypermissions
- Android Runtime.getRuntime().exec
- Android App压力测试之Monkey
- App性能优化之内存优化
- Android基础系列合集