在运行时根据方法名称和方法调用方法
处理一个需求,我需要根据运行时提供的类和方法的名称来调用类方法。
我可以通过什么不同的方式来实现这一目标(首选方式)。我看到的一个问题是可能有多个具有相同名称的类,因此可能会产生问题。
任何关于如何最好地完成此操作的输入都会对我很有帮助,
提前致谢
Working on a requirement where i need to call a class Method based on the name of the class and method being provided at runtime.
What are the different way by which i can achieve this (preferred one).One issue which i can see is that there can be multiple classes with same name so that can create a problem.
Any inputs how best this can be done will be much helpful for me
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您必须将完全限定的类名与其包一起使用,这对于类加载器来说是唯一的。
您需要知道参数类型,否则在调用它时无法为其提供合理的值。
You have to use the fully qualified class name with its package, which is unique for a ClassLoader.
You need to know the parameters types otherwise you can't give it sensible values when you call it.
我认为您正在寻找反射(请参阅 http://java.sun.com/developer/技术文章/ALT/Reflection/)
I think you look for Reflection (see http://java.sun.com/developer/technicalArticles/ALT/Reflection/)
您将需要使用反射: http://java.sun.com/developer/technicalArticles /ALT/Reflection/
伪代码如下所示:
You will want to use reflection: http://java.sun.com/developer/technicalArticles/ALT/Reflection/
The pseudo code looks something like:
类有一个限定名称,您可以使用它来防止这些“多个类同名”。限定名称为“com.example.ExampleClass”,非限定名称为“ExampleClass”。
您可以使用 Class.getName() 获取限定名称;
至于方法;
您可以查找反射(http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html)。要调用该函数,请在 java.lang.reflect.Method 上使用 invoke。
Classes have a qualified name you can use to prevent these "multiple classes with the same name". A Qualified name would be "com.example.ExampleClass" - a non-qualified name would be "ExampleClass".
You can get the qualified name with Class.getName();
As for the methods;
You can look up on reflection (http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html). To call the function, use invoke on the java.lang.reflect.Method.