如何使用变量名调用java方法?
假设我有 Method1(void)、Method2(void)...
有没有办法我可以选择其中一个带有变量的方法?
String MyVar=2;
MethodMyVar();
Say I have Method1(void), Method2(void)...
Is there a way i can chose one of those with a variable?
String MyVar=2;
MethodMyVar();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用反射:
Use reflection:
只有通过反思。请参阅
java.lang.reflect
包。您可以尝试以下操作:
如果方法有参数并且缺少各种异常处理,您的代码可能会有所不同。
但问问自己这是否真的有必要?可以改变你的设计来避免这种情况吗?反射代码很难理解,并且比仅仅调用 obj.someMethod() 慢。
祝你好运。快乐编码。
Only through reflection. See the
java.lang.reflect
package.You could try something like:
Your code may be different if the method has parameters and there's all sorts of exception handling missing.
But ask your self if this is really necessary? Can something be changed about your design to avoid this. Reflection code is difficult to understand and is slower than just calling
obj.someMethod()
.Good luck. Happy Coding.
您可以使用策略设计模式以及从字符串到相应的具体策略对象的映射。这是安全有效的手段。
因此,进行
HashMap
查找。例如,类似于:
您还可以使用反射或“反转”问题并使用多态性
You could use the Strategy design pattern and a mapping from the string you have to the corresponding concrete strategy object. This is the safe and efficient means.
So, have a
HashMap<String,SomeInterfaceYouWantToInvokeSuchAsRunnableWithPseudoClosures>
look-up.E.g., something along the lines of:
You could also use reflection or "invert" the problem and use polymorphism
我不确定在静态方法的第一个参数为
null
的情况下,接受的答案如何适用于method.invoke()
(尽管放置虚拟值仍然有效)。根据 Java™ 教程:下面显示了一个完整的示例(Main.java),适用于静态(按类)VS 非静态(按实例),以及其他示例对于带参数的方法、导入必需的类、catch异常以及超类方法示例。
输出:
I'm not sure how the accepted answer works for
method.invoke()
without first argument of static method beingnull
(put dummy value still works though). According to The Java™ Tutorials:The following shows a complete examples (Main.java), for both static(by class) VS non-static(by instance), plus additional example for method with argument, import necessary class, catch exception, and also superclass method example.
Output: