1

我得到了一个应用程序,它应该根据参数的输入调用不同的方法。到目前为止,我的想法基本上是,我创建一个 Switch 并按情况分别调用这些方法。例子:

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

我正在考虑通过给定字符串调用该方法的选项,如this question中所提供:

将方法名称作为字符串给出时,如何调用 Java 方法?

但后来我从一个答案中读到,它不安全。你们有什么感想?

4

2 回答 2

1

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

如果没有反射,您可以使用 a 来实现这一点,您可以Map<String, Callable>在其中Callable为每个方法调用使用匿名类实例。更多样板代码,但“类型安全”。

于 2012-11-15T14:03:32.840 回答
0

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

在这里阅读更多:http ://en.wikipedia.org/wiki/Command_pattern

于 2012-11-15T14:10:12.783 回答