假设我有两个看起来像这样的方法:
private static boolean validate1(String line)
private static boolean validate2(String line)
我使用的方法取决于用户作为参数传递的内容,因此我只想使用其中一种方法。
如果我想遍历一个字符串列表,我每次都要检查使用什么方法,或者有没有办法存储我想要的方法,只需用函数指针等参数调用它?
答案 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。你可以按照自己喜欢的方式使用它。