Java 地图<;字符串,方法引用>;-使用参数运行methodReference
我尝试过这样的方法,但没有成功 包含方法引用的我的映射:Java 地图<;字符串,方法引用>;-使用参数运行methodReference,java,java-8,method-reference,Java,Java 8,Method Reference,我尝试过这样的方法,但没有成功 包含方法引用的我的映射: private final Map<String, Runnable> validationMethods = new HashMap<>(); { validationMethods.put("getTransactions", ValidationInterceptor::validateTransactions); validationMethods.put("getDeals", Validati
private final Map<String, Runnable> validationMethods = new HashMap<>();
{
validationMethods.put("getTransactions", ValidationInterceptor::validateTransactions);
validationMethods.put("getDeals", ValidationInterceptor::validateDeals);
}
private final Map validationMethods=new HashMap();
{
put(“getTransactions”,ValidationInterceptor::validateTransactions);
validationMethods.put(“getDeals”,ValidationInterceptor::ValidateDetails);
}
以下是我试图从地图上运行的方法:
private static void validateTransactions(Method method, List<Object> arguments, Object resourceInstance) {
doSomthing(method, arguments, resourceInstance);
}
private static void validateDeals(Method method, List<Object> arguments, Object resourceInstance) {
doSomthing(method, arguments, resourceInstance);
}
validationMethods.get(method.getName()).validate(method, arguments, message);
私有静态void validateTransactions(方法、列表参数、对象resourceInstance){
doSomthing(方法、参数、resourceInstance);
}
私有静态void validatedals(方法、列表参数、对象resourceInstance){
doSomthing(方法、参数、resourceInstance);
}
以及带参数的核心方法:
protected void handleValidation(final Message message, final Method method, final List<Object> arguments) {
validationMethods.get(method.getName()).run();
}
protectedvoid handleValidation(最终消息、最终方法、最终列表参数){
validationMethods.get(method.getName()).run();
}
问题是-如何将参数传递给静态方法?定义:
问题是静态方法不能表示为Runnable
s:methodrun
没有参数(当您调用.run()
时,您不传递参数)
在标准库中,我们没有一个函数可以接受3个参数并返回一个值。如果您将参数的数量减少到2,我们可以使用。如果有一个参数,它将派上用场。这就是为什么在这里声明自己的功能接口是合理的。定义:
问题是静态方法不能表示为Runnable
s:methodrun
没有参数(当您调用.run()
时,您不传递参数)
在标准库中,我们没有一个函数可以接受3个参数并返回一个值。如果您将参数的数量减少到2,我们可以使用。如果有一个参数,它将派上用场。这就是为什么在这里声明自己的功能接口是合理的。我可以看到您使用
方法来定义所需的验证规则。因此,您应该有一个具有所需方法和参数数量的接口:
protected void handleValidation(final Message message, final Method method, final List<Object> arguments) {
validationMethods.get(method.getName()).run();
}
@功能接口
接口验证规则{
// add as many parameters as you need
void validate(Message message, List<Object> arguments);
我可以看到您使用方法
来定义所需的验证规则。因此,您应该具有与所需方法和参数数量的接口:
protected void handleValidation(final Message message, final Method method, final List<Object> arguments) {
validationMethods.get(method.getName()).run();
}
@功能接口
接口验证规则{
// add as many parameters as you need
void validate(Message message, List<Object> arguments);
您的Map
值是Runnable
,由于run()
不带参数,您无法为其分配带参数的方法引用。您的Map
值是Runnable
,由于run()
不带参数,您无法为其分配带参数的方法引用。
public class ValidationService {
private static final ValidationRule NULL = (message, arguments) -> {};
private final Map<String, ValidationRule> rules = new HashMap<>();
{
rules.put("getTransactions", new GetTransactionsValidationRule());
rules.put("getDeals", new GetDealsValidationRule());
}
public void handleValidation(Message message, Method method, List<Object> arguments) {
rules.getOrDefault(method.getName()).validate(arguments);
}
}
ValidationService validationService = new ValidationService();
validationService.handleValidation(...);