想象一下,我有一个调用内部另一个方法的方法。它可能如下所示:
public void enclosingMethod(String parameter, boolean order){
MyType t = new MyType();
t.internalMethod(paramter, order);
}
public void internalMethod(String parameter, boolean order){
anotherMethod1(str1, order1);
//etcetera
anotherMethod31312(str31312, order31312);
}
anotherMethodn, 0 < n < 31312
实现如下:
anotherMethodn(String parameter = "default", boolean order = true){
//Implementation
}
问题是我需要调用另一个方法取决于传递给internalMethod(String parameter, boolean order)
的参数。例如,我按如下方式调用enclosingMethod
方法:
enclosingMethod("PartnerStatistic", false);
在这种情况下,我需要调用anotherMethod23("PartnerStatistic", false)
,但必须使用默认参数的值调用另一个anotherMethod
。
我怎样才能更灵活,而不是多次写if-else
子句?可能有一个合适的知名设计模式?
答案 0 :(得分:1)
在Java中,如果您不知道您需要调用哪种方法,可以使用反射来调用其名称指定的方法。
示例:
ClassName.class.getMethod("anotherMethod31312").invoke(instance, arg1, arg2);
你仍然必须&#34;计算&#34;某种方式的方法名称,但您可以避免使用广泛的if-else
结构。这个&#34;计算&#34;例如,可以通过接收要调用的方法的名称,或者根据您的情况,可以是简单的String
连接,例如"anotherMethod" + i
i
是一个数字。
此外,Java没有默认参数。要模拟&#34;默认参数,您可以创建方法的重载,该方法调用参数的其他传递默认值。
模拟默认参数的示例:
public void doSomething(String someParam) {
}
public void doSomething() {
doSomething("This is the default value for 'someParam'.");
}
使用它:
// Calling doSomething() with explicit parameter:
doSomething("My custom parameter");
// Calling doSomething() with default parameters:
doSomething();