我有一个应用程序应该根据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?
但后来我从其中一个答案中读到,这不安全。你们觉得怎么样?
答案 0 :(得分:1)
如果您需要从字符串转到方法调用,反射可能是您的最佳选择。没有涉及很大的安全问题,特别是如果您限制允许调用的方法集。使用Map<String, Method>
是实现它的一种方法,具有改进性能的好处,因为主要瓶颈不是反射方法调用,而是方法查找。
如果没有反射,您可以使用Map<String, Callable>
实现此目的,您可以使用匿名类实例为每个方法调用实现Callable
。相当多的样板代码,但“类型安全”。
答案 1 :(得分:0)
使用Command设计模式可以实现与反射相同的功能。它将操作包装到对象中,因此可以使用通用接口查找和调用它们。