通过参数调用不同的方法

时间:2012-11-15 13:52:38

标签: java reflection methods

我有一个应用程序应该根据params的输入调用不同的方法。直到现在我的想法基本上是,我创建一个Switch并根据它的情况分别调用方法。示例:

switch (methodName)
{
    case "method1":
        method1();
        break;
    case "method2":
        method2();
        break;
    default:
        System.out.println(methodName + " is not a valid method!");
}

我正在考虑通过给定字符串调用方法的选项,如此问题所示:

How do I invoke a Java method when given the method name as a string?

但后来我从其中一个答案中读到,这不安全。你们觉得怎么样?

2 个答案:

答案 0 :(得分:1)

如果您需要从字符串转到方法调用,反射可能是您的最佳选择。没有涉及很大的安全问题,特别是如果您限制允许调用的方法集。使用Map<String, Method>是实现它的一种方法,具有改进性能的好处,因为主要瓶颈不是反射方法调用,而是方法查找。

如果没有反射,您可以使用Map<String, Callable>实现此目的,您可以使用匿名类实例为每个方法调用实现Callable。相当多的样板代码,但“类型安全”。

答案 1 :(得分:0)

使用Command设计模式可以实现与反射相同的功能。它将操作包装到对象中,因此可以使用通用接口查找和调用它们。

在此处阅读更多内容:http://en.wikipedia.org/wiki/Command_pattern