java中如何调用方法_如何在Java中传递和调用方法引用

假设我有一个名为Server的类,我想允许其他人为它编写插件. Say Plugin是一个扩展Runnable的接口,它添加了一个方法:void init(…).收集数据并将其发送到服务器是一个插件的工作.但是,到了将数据发送到服务器的时候,它是如何做到的?来自C和C我正在寻找一个关于函数指针的思考.虽然我没有在Java标准类库之外找到示例,但在Java中似乎是可能的.

如何将方法引用传递给init方法,以便插件可以存储它,然后在插件想要发送数据时如何调用方法?现在说所需的Server方法是:void sendData(Integer data).

例如:

// Inside Server

Plugin p = new PluginImplementation();

p.init(this::sendData);

// Plugin init

public void init(?? sendMethod) {

storedSendMethod = sendMethod;

// ...

}

// Plugin run

public void run() {

// ...

storedSendMethod(x) // Sends data to server

// ...

}

解决方法:

使用java.util.function.Function,我们可以将函数作为参数传递给方法,然后使用apply()将其应用于相关参数.这是一个例子:

import java.util.function.Function;

public class FunctionDemo {

// we will pass a reference to this method

public static Integer square(Integer x) {

return x * x;

}

// this method accepts the function as an argument and applies it to the input: 5

public static Integer doSomething(Function func) {

return func.apply(5);

}

public static void main(String[] args) {

// and here's how to use it

System.out.println(doSomething(FunctionDemo::square)); // prints 25

}

}

带有多个参数的附加版本(作为数组传递):

public static Integer sum(Integer[] x) {

Integer result = 0;

for(int i = 0; i < x.length; i++)

result += x[i];

return result;

}

public static void main(String[] args) {

Integer[] arr = {1,2,3,4,5};

System.out.println(doSomething(Play::sum, arr));

}

public static Integer doSomething(Function func,

Integer[] arr) {

return func.apply(arr);

}

标签:java,java-8,method-reference

来源: https://codeday.me/bug/20190528/1169316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值