Java 返回具有任意数量输入参数的函数
我的代码需要通过各种助手类预先检查一系列复杂的正则表达式。 然后,如果一切正常,它需要以事后检查的方式执行一系列函数调用。如果case构造没有捕获到某些内容,我需要稍后将其记录下来 我正在努力避免两个重复的Java 返回具有任意数量输入参数的函数,java,java-8,functional-programming,runnable,Java,Java 8,Functional Programming,Runnable,我的代码需要通过各种助手类预先检查一系列复杂的正则表达式。 然后,如果一切正常,它需要以事后检查的方式执行一系列函数调用。如果case构造没有捕获到某些内容,我需要稍后将其记录下来 我正在努力避免两个重复的if语句 我在想,如果bigif语句(或switch)要返回一个函数,我可以检查返回的函数是否为null来进行预检查。如果它为空,我也可以记录它。如果它不是空的,我可以直接调用它。这样我就不需要在代码的两个部分进行复杂的逻辑检查 我的想法大致如下: class Playground {
if
语句
我在想,如果bigif
语句(或switch
)要返回一个函数,我可以检查返回的函数是否为null来进行预检查。如果它为空,我也可以记录它。如果它不是空的,我可以直接调用它。这样我就不需要在代码的两个部分进行复杂的逻辑检查
我的想法大致如下:
class Playground {
public static Function getFunction(String condition) {
switch (condition) {
case "one":
return Function one(1);
case "two":
return Function two("two",2);
default:
return null;
}
}
public static void one(int i) {
System.out.println("one: i: " + i);
}
public static void two(String s, int i) {
System.out.println("two: s: " + s + " i: " + i);
}
public static void main(String[ ] args) {
Function f1 = getFunction("one");
Function f2 = getFunction("two");
f1();
f2();
}
}
但是我不能完全理解语法
有人能告诉我这在Java中是否可行吗?如果是这样的话,也许有人可以就语法更正提出建议
- 所有调用的方法都将返回void
- 它们将是实例调用,而不是静态方法
- 返回的函数可能有不同数量的输入参数。当调用该方法时,我也需要以某种方式进行设置
如果没有这样的方法,是否有一种替代方案,也许是一种设计模式,可能会有所帮助?(除了将复杂的if语句映射到类似整数的内容之外。如果没有匹配项,则为0,否则您有值。然后您将有另一个基于int的开关。)看起来您希望返回调用方法的Runnable:
class Playground{
public static Runnable getRunnable(String condition) {
switch (condition) {
case "one":
return () -> one(1);
case "two":
return () -> two("two", 2);
default:
return null;
}
}
public static void one(int i) {
System.out.println("one: i: " + i);
}
public static void two(String s, int i) {
System.out.println("two: s: " + s + " i: " + i);
}
public static void main(String[ ] args) {
Runnable f1 = getRunnable("one");
Runnable f2 = getRunnable("two");
Runnable f3 = getRunnable("three");
f1.run();
f2.run();
if (f3 == null) {
System.out.println("none");
}
}
}
这是一个选项吗?我也可以这样做-但在这一点上,我倾向于使用两个case构造-进行检查的第一部分涉及大约50个排列-每个都有可能的正则表达式。因此,这是一个计算密集型的选择过程,而且非常复杂。因此,将其映射到整数可能是一种比反射更干净的方法。我的目标是尽可能降低复杂性并保持维护简单。@Abra-这就是我在语法方面的幼稚之处。。。一直在审查Youtube视频,内容包括谓词、函数、供应商和消费者。。试图提高我的理解。一旦你检索到这个方法,你就需要调用它,不是吗?您如何知道调用该方法所需提供的参数的数量和类型?我更希望作为函数返回的项是由它直接调用所需的所有项构成的-封装是Java希望的,但可能不是Java提供的。。