静态函数指针 java



假设我有 2 个方法看起来像这样:

private static boolean validate1(String line)
private static boolean validate2(String line) 

我使用的方法取决于用户作为参数传入的内容,所以我只想使用其中一种方法。

如果我想遍历字符串列表,我是否必须每次检查使用什么方法,或者有没有办法存储我想要的方法并使用函数指针等参数调用它?

由于验证方法的签名相同,因此可以将Function<String, Boolean>映射到字符串,如下所示:

class Main {
    public static boolean validate1(String s) { return true; }
    public static boolean validate2(String s) { return false; }
    public static void main(String[] args) {
        Map<String, Function<String, Boolean>> funcMap = new HashMap<>();
        funcMap.put("First", Main::validate1);
        funcMap.put("Second", Main::validate2);
        System.out.println(funcMap.get("First").apply("Wow!"));
    }
}

此处的输出将是 true .

如果使用 Java 8 或更高版本,则可以执行以下操作。

为您的方法创建一个功能接口,如下所示:

@FunctionalInterface
interface Validator {
    boolean validate(String s);
}

在使用 2 个静态方法的类中,您现在可以将其中一个方法分配给变量。根据参数,您可以分配 validate1 方法:

Validator v = this::validate1;

或 Validate2 方法:

Validator v = this::validate2;

然后,您可以在循环中使用验证器对象来执行验证。

for(String s : strings) {
    v.validate(s);
}

或者使用 List 接口中的新 forEach(( 方法,或者使用 Streams API。您可以随心所欲地使用它。

最新更新