如何将方法作为参数传递给其他方法?

时间:2019-06-10 16:30:50

标签: java method-reference

我有一种方法可以在ClassA中说。我想将ClassB中的方法作为参数传递给ClassA中的方法。在这种情况下,我想从getCode传递ClassB方法。我没有ClassB的任何实例,而我想创建一个实例而无需创建实例。

我尝试使用简单的方法引用,但是这种方式不起作用。 我也不想使getCode成为静态方法。

public class ClassA {

   public void validate() {
       Validation validation = new Validation(ClassB::getCode, code);
       //...
   }

}

我的最终目标是要在RequestValidator类中添加验证,每个验证都将使用特定方法创建,并在其构造函数中创建一个字符串,本例中为来自classB和代码的getCode。请注意,我只需要一个RequestValidator实例。像这样:

RequestValidator validator = new RequestValidator<>()
        .addValidation(new Validation(ClassB::getCode, code))
        .addValidation(new Validation(ClassB::getName, name));

2 个答案:

答案 0 :(得分:0)

getCode必须是静态函数,语法为ClassB.getCode。您需要将ClassB导入到ClassA中。

请参阅:

Calling static method from another java class

答案 1 :(得分:0)

只要正确定义方法参数,您对方法引用的使用就可以正常工作。您没有提供很多信息,因此在这里我将做一些假设。如果这不是您要记住的,请纠正我:

public class B { 
  public static String getCode() {
    return "foobar"; // Replace with your own functionality
  }
}

public class Validation {
  Validation(Supplier<String> supplier, String code) {
    String suppliedCode = supplier.get();
    // Do your validation logic
  }
}

public static void validate() {
  Validation validation = new Validation(ClassB::getCode, code);
}

但是,坦率地说,这感觉有点过分了。为什么不让您的Validation构造函数接受两个String参数(或者碰巧使用的任何类型),然后执行此操作?

public static void validate() {
  Validation validation = new Validation(ClassB.getCode(), code);
}

您是否有合法需要传递方法引用,而不是简单地传递方法调用的返回值?