java8方法引用中的this_Java 8 新特性:方法引用

Java在Java 8中提供了一种称为方法引用的新功能。方法引用用于引用功能接口的方法。它是lambda表达式的紧凑而简单的形式。每次使用lambda表达式仅引用方法时,都可以将lambda表达式替换为方法引用。在本教程中,我们将详细解释方法参考概念。

方法引用的类型

引用静态方法。

引用实例方法。

引用构造函数。

引用静态方法

您可以引用类中定义的静态方法。以下是描述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) {

BiFunctionadder = 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) {

BiFunctionadder1 = Arithmetic::add;

BiFunctionadder2 = Arithmetic::add;

BiFunctionadder3 = 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

引用实例方法

像静态方法一样,您也可以引用实例方法。在下面的示例中,我们描述了引用实例方法的过程。语法:

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

在下面的示例中,我们引用实例(非静态)方法。可运行接口仅包含一种抽象方法。因此,我们可以将其用作功能接口。

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) {

BiFunctionadder = new Arithmetic()::add;

int result = adder.apply(10, 20);

System.out.println(result);

}

}

输出:

30

引用构造函数

您可以使用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

参考

https://www.javatpoint.com/java-8-method-reference

原文始发于微信公众号(Jast):Java 8 新特性:方法引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值