加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

varargs作为java 8中函数的输入参数

发布时间:2020-12-15 05:14:43 所属栏目:Java 来源:网络整理
导读:在 Java 8中,如何定义函数以适合varargs. 我们有这样的功能: private String doSomethingWithArray(String... a){ //// do something return "";} 由于某种原因,我需要使用Java 8函数调用它(因为’andThen’可以与其他函数一起使用.) 因此我想定义下面给出
在 Java 8中,如何定义函数以适合varargs.

我们有这样的功能:

private String doSomethingWithArray(String... a){
   //// do something
   return "";
}

由于某种原因,我需要使用Java 8函数调用它(因为’andThen’可以与其他函数一起使用.)

因此我想定义下面给出的东西.

Function<String...,String> doWork = a-> doSomethingWithArray(a)  ;

这给了我编译错误.以下工作,但输入现在必须是一个数组,不能是一个单独的字符串.

Function<String[],String> doWork = a-> doSomethingWithArray(a)  ;

这里我提到了String,但它可以是任何Object的数组.

有没有办法使用varargs(…)而不是array([])作为输入参数?

或者,如果我创建一个类似于Function的新界面,是否可以创建类似下面的内容?

@FunctionalInterface
interface MyFunction<T...,R> {
//..
}

解决方法

在这种情况下,您不能使用varargs语法,因为它不是方法参数.

根据您使用的函数类型,您可能根本不需要它,您可以按原样使用您的方法,而无需通过功能接口引用它们.

作为替代方案,您可以定义自己的功能界面,如下所示:

@FunctionalInterface
public interface MyFunctionalInterface<T,R> {
    R apply(T... args);
}

然后你的声明变成:

MyFunctionalInterface<String,String> doWork = a -> doSomethingWithArray(a);

并且调用doWork现在可以是:

String one = doWork.apply("one");
String two = doWork.apply("one","two");
String three = doWork.apply("one","two","three");
...
...

note – 功能接口名称只是一个占位符,可以改进以与功能接口的Java命名约定保持一致,例如VarArgFunction或类似的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读