如何调用方法取决于另一个方法的参数?

时间:2014-09-10 07:49:31

标签: java

想象一下,我有一个调用内部另一个方法的方法。它可能如下所示:

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子句?可能有一个合适的知名设计模式?

1 个答案:

答案 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();