静态函数指针java

静态函数指针java,java,Java,假设我有两种方法,如下所示: private static boolean validate1(String line) private static boolean validate2(String line) @FunctionalInterface interface Validator { boolean validate(String s); } 我使用的方法取决于用户作为参数传入的内容,因此我只想使用其中一种方法 如果我想在字符串列表中循环,我是否每次都必须检查要使用

假设我有两种方法,如下所示:

private static boolean validate1(String line)

private static boolean validate2(String line) 
@FunctionalInterface
interface Validator {
    boolean validate(String s);
}
我使用的方法取决于用户作为参数传入的内容,因此我只想使用其中一种方法


如果我想在字符串列表中循环,我是否每次都必须检查要使用的方法,或者是否有一种方法可以存储我想要的方法,并使用函数指针之类的参数调用它

因为验证方法的签名是相同的,所以可以将a映射到如下所示的字符串:

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!"));
    }
}
主类{
公共静态布尔validate1(字符串s){return true;}
公共静态布尔validate2(字符串s){return false;}
公共静态void main(字符串[]args){
Map funcMap=新的HashMap();
put(“First”,Main::validate1);
put(“第二”,Main::validate2);
System.out.println(funcMap.get(“First”).apply(“哇!”);
}
}

这里的输出将是
true

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

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

private static boolean validate1(String line)

private static boolean validate2(String line) 
@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);
}

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

他们如何避免重复字符串?你知道为什么这被否决了吗?这似乎是一个很好的答案。@gil.fernandes,不能说他们什么时候不留下评论。好消息是一个账户——一票。如果你认为这是一个好的方法,欢迎你投票:)真的:我认为你的答案是正确的:你在映射中存储函数指针(方法引用),然后用它来执行静态方法+1.