Twi*_*sky 3 java if-statement java-8
这是我的问题.我目前有一个功能正常的路由调用的功能!但是,我想分析检查参数块.
让我解释.当用户输入URL以到达该功能时,他可以放置一些可选参数(总共6个).至少需要其中一个参数才能继续.我的框架配置为为尚未被用户通知的参数分配空值.
要检查已通知哪些参数并验证它们,我有一个块:
public Result edit(String param1, String param2, String param3, String param4, String param5, String param6) {
Map<String, Object> parameters = new HashMap<>();
if (param1 != null) {
// Checking function depending on data type (URL, Boolean, ..), return a clean param or throw an InvalidParamException
// Variable param depends on type returned by checkParamType1
param = checkParamType1(param1);
parameters.put("param1", param);
}
if (param2 != null) {
param = checkParamType1(param2);
parameters.put("param2", param);
}
if (param3 != null) {
param = checkParamType2(param3);
parameters.put("param3", param);
}
if (param4 != null) {
param = checkParamType2(param4);
parameters.put("param4", param);
}
if (param5 != null) {
param = checkParamType3(param5);
parameters.put("param5", param);
}
if (param6 != null) {
param = checkParamType3(param6);
parameters.put("param6", param);
}
assert(parameters.size() > 0, "At least one parameter required");
// [TREATMENT]
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在您看来,是否有可能将此块分解?
我的项目在JAVA 8上运行.
谢谢 :)
你可以做的最好的恕我直言是提取一个方法,并为你的自定义检查器使用方法参考.像这样的东西:
private void checkAndAssign(Map<String, Object> map, String paramName, String paramValue, Function<String, Object> checker){
if(paramValue!=null){
Object param = checker.apply(paramValue);
map.put(paramName, param);
}
}
public Result edit(String param1, String param2, String param3, String param4, String param5, String param6) {
Map<String, Object> parameters = new HashMap<>();
checkAndAssign(map, "param1", param1, MyClass::checkParam1);
checkAndAssign(map, "param2", param2, MyClass::checkParam2);
checkAndAssign(map, "param3", param3, MyClass::checkParam3);
checkAndAssign(map, "param4", param4, MyClass::checkParam4);
checkAndAssign(map, "param5", param5, MyClass::checkParam5);
checkAndAssign(map, "param6", param6, MyClass::checkParam6);
assert(parameters.size() > 0, "At least one parameter required");
// [TREATMENT]
}
Run Code Online (Sandbox Code Playgroud)
MyClass :: checkParam1是方法引用.编译器将允许您将此类引用替换为类似的功能接口Function.
请参阅Java 8教程中的方法参考.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |