在运行时根据方法名称和方法调用方法

发布于 2024-12-25 04:01:28 字数 155 浏览 1 评论 0原文

处理一个需求,我需要根据运行时提供的类和方法的名称来调用类方法。

我可以通过什么不同的方式来实现这一目标(首选方式)。我看到的一个问题是可能有多个具有相同名称的类,因此可能会产生问题。

任何关于如何最好地完成此操作的输入都会对我很有帮助,

提前致谢

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

温柔女人霸气范 2025-01-01 04:01:28

您必须将完全限定的类名与其包一起使用,这对于类加载器来说是唯一的。

Class clazz = Class.forName(packageAndClassName);
Method method = clazz.getDeclaredMethod(methodName, parameterTypes);

您需要知道参数类型,否则在调用它时无法为其提供合理的值。

You have to use the fully qualified class name with its package, which is unique for a ClassLoader.

Class clazz = Class.forName(packageAndClassName);
Method method = clazz.getDeclaredMethod(methodName, parameterTypes);

You need to know the parameters types otherwise you can't give it sensible values when you call it.

裸钻 2025-01-01 04:01:28

您将需要使用反射: http://java.sun.com/developer/technicalArticles /ALT/Reflection/

伪代码如下所示:

Get the Class object (Class.forName)
From the Class, lookup the Method you want (class.getDeclaredMethod)
Call the method (method.invoke)

You will want to use reflection: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

The pseudo code looks something like:

Get the Class object (Class.forName)
From the Class, lookup the Method you want (class.getDeclaredMethod)
Call the method (method.invoke)
半城柳色半声笛 2025-01-01 04:01:28

类有一个限定名称,您可以使用它来防止这些“多个类同名”。限定名称为“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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文