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或类似的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |