【发布时间】:2016-08-05 20:42:19
【问题描述】:
我们有这个学校项目,我们应该在其中制作类似租车的 Java 应用程序。
我编写了以下代码,它只获取一些 jsonObject 属性,根据操作代码调用函数并将一些东西放入 jsonObject 属性中。但我真的不喜欢这种代码重复模式......
if(action.equals("REGOPR")) {
// Register operator
String user = (String)jsonObject.get("username");
String pass = (String)jsonObject.get("password");
if(registerOperator(user, pass))
jsonObj.put("resp", "Operator successfully registered!");
else {
jsonObj.put("status", "fail");
jsonObj.put("resp", "Username already taken!");
}
} else if (action.equals("ADDVEH")) {
// Add vehicle
String manuf = (String)jsonObject.get("manufacturer");
String regis = (String)jsonObject.get("registration");
String licen =((String)jsonObject.get("license"));
if(addVehicle(manuf, regis, licen))
jsonObj.put("resp", "Successfully added vehicle!");
else {
jsonObj.put("status", "fail");
jsonObj.put("resp", "Vehicle alredy exists!");
}
} And fifteeen more else ifs with different "actions"...
我想做的是这样的
if(action.equals("REGOPR")){
awesomeMethod(registerOperator,
"Custom succesffull message",
"Fail message",
"username",
"password");
} else if(action.equals("ADDVEH")) {
awesomeMethod(addVehicle,
"Custom succesfull message 2",
"Fail message 2",
"manufacturer",
"registration",
"license");
}
所以最后是任意数量的字符串,对于每个字符串,它应该从 json 中获取值并将其输入给定的函数。
【问题讨论】:
-
我认为你可以在
awesomeMethod(String... obj)上使用这个,这基本上告诉awesomeMethod()他将收到一个或多个参数。使用Object... obj时,应始终将其放在最后。例如:method(String one, String two, String... three). -
@Julian 是的。但这只会传递参数的名称。以后如何使用新提取的参数调用函数?
-
您是否考虑过更多态的方法?也许使用接口的 HashMap 而不是 15+ 的 switch 语句?
-
@Johannes 你能再扩展一下吗?这些天我对 Java 有点生疏了。 :D
标签: java function generics lambda java-8