簡體   English   中英

如何將方法作為參數傳遞給其他方法?

[英]How to pass a method as an argument to a different method?

我有一個方法可以說在ClassA 我想將ClassB中的方法作為參數傳遞給ClassA該方法。 在這種情況下,我想從ClassB傳遞getCode方法。 我沒有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));

getCode必須是靜態函數,語法為ClassB.getCode。 您需要將ClassB導入到ClassA中。

看到:

從另一個Java類調用靜態方法

只要正確定義方法參數,您對方法引用的使用就可以正常工作。 您沒有提供很多信息,因此在這里我將做一些假設。 如果這不是您要記住的,請更正我:

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);
}

您是否有合法需要傳遞方法引用,而不是簡單地傳遞方法調用的返回值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM