Men*_*ent 3 java conditional parameter-passing
我正在使用JDO Query类,我需要有条件地将某些参数传递给该execute方法,如下面的代码所示.
我不知道如何用Java做到这一点.
query.declareParameters("String alphaP");
query.declareParameters("String bravoP");
query.declareParameters("String charlieP");
if (condition) {
if (othercondition) {
query.declareParameters("List<String> stringList");
}
else {
query.declareParameters("String simpleString");
}
}
if (someothercondition) {
query.declareParameters("int deltaP");
}
if (yetanothercondition) {
query.declareParameters("int echoP");
}
if (thelastcondition) {
query.declareParameters("int foxtrotP");
}
List<ResultClass> results = (List<ResultClass>) query.execute(
alphaP,
bravoP,
charlieP,
// ... and whatever other parameters are required based on
// which conditions are true above
);
Run Code Online (Sandbox Code Playgroud)
如何有条件地将Java中的参数传递给一个采用可变数量参数的方法?
@Richard回答了有关JDO Query课程的具体问题.(使用其中一种替代queryWith...方法.)
更一般的问题的答案是"它取决于".具体而言,它取决于方法签名.
1)如果声明方法采用可变数量的参数作为数组,列表,映射或其他方式传递,那么答案是显而易见的.在数组/列表/ map /中组装实际参数,然后传递它们.
2)如果使用"varargs"参数声明方法,则可以传递显式的实际参数数组; 例如
public void test(String... args) { ... }
test("Hi", "Mom");
test(new String[]{"Hi", "Pa"});
String[] args = new String[]{"Hi", "Bro"};
test(args);
Run Code Online (Sandbox Code Playgroud)
3)如果实际存在多个重载方法,那么您别无选择,只能根据您必须传递的参数数量选择并调用适当的重载:
public void test(String arg1) { ... }
public void test(String arg1, String arg2) { ... }
...
if (nosArgs == 1) {
test(arg1);
} else if (nosArgs == 2) {
test(arg1, arg2);
} else ...
Run Code Online (Sandbox Code Playgroud)
您可能认为反射会有所帮助,因为当您反射性地调用方法时,您将实际参数作为一个传递Object[].但是这没有多大帮助,因为你还需要使用适当的Method对象,并且(比方说)test方法的每个重载都有不同的Method对象.所以你最终得到的条件/开关代码相当于非反射情况.