Java 返回具有任意数量输入参数的函数

Java 返回具有任意数量输入参数的函数,java,java-8,functional-programming,runnable,Java,Java 8,Functional Programming,Runnable,我的代码需要通过各种助手类预先检查一系列复杂的正则表达式。 然后,如果一切正常,它需要以事后检查的方式执行一系列函数调用。如果case构造没有捕获到某些内容,我需要稍后将其记录下来 我正在努力避免两个重复的if语句 我在想,如果bigif语句(或switch)要返回一个函数,我可以检查返回的函数是否为null来进行预检查。如果它为空,我也可以记录它。如果它不是空的,我可以直接调用它。这样我就不需要在代码的两个部分进行复杂的逻辑检查 我的想法大致如下: class Playground {

我的代码需要通过各种助手类预先检查一系列复杂的正则表达式。 然后,如果一切正常,它需要以事后检查的方式执行一系列函数调用。如果case构造没有捕获到某些内容,我需要稍后将其记录下来

我正在努力避免两个重复的
if
语句

我在想,如果big
if
语句(或
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提供的。。