静态函数指针java

时间:2018-03-10 18:23:01

标签: java

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

private static boolean validate1(String line)

private static boolean validate2(String line) 

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

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

2 个答案:

答案 0 :(得分:0)

由于验证方法的签名相同,您可以将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

答案 1 :(得分:-1)

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

为您的方法创建一个功能界面:

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

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

Validator v = this::validate1;

或validate2方法:

Validator v = this::validate2;

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

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

或使用List接口中的新forEach()方法,或使用Streams API。你可以按照自己喜欢的方式使用它。