当给定方法名称为字符串时,如何调用Java方法?| Java Debug 笔记

153 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

当给定方法名称为字符串时,如何调用Java方法?

如果我有两个变量:

Object obj;
String methodName = "getName";

在不知道的类的情况下obj,如何调用由其标识的方法methodName?

被调用的方法没有参数,并且有一个String返回值。它是Java bean的吸气剂。

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

反射

java.lang.reflect.Method method;
try {
  method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) { ... }
  catch (NoSuchMethodException e) { ... }

参数标识您需要的非常特定的方法(如果有多个重载可用,如果该方法没有参数,则仅给出methodName)。

然后您通过调用该方法

try {
  method.invoke(obj, arg1, arg2,...);
} catch (IllegalArgumentException e) { ... }
  catch (IllegalAccessException e) { ... }
  catch (InvocationTargetException e) { ... }

同样,.invoke如果没有,请忽略中的参数。但是,是的。阅读有关Java反射的信息

高分回答:

从反射中使用方法调用:

Class<?> c = Class.forName("class name");
Method method = c.getDeclaredMethod("method name", parameterTypes);
method.invoke(objectToInvokeOn, params);

在哪里:

"class name" 是班级的名称
objectToInvokeOn 是Object类型,是您要在其上调用方法的对象
"method name" 是您要调用的方法的名称
parameterTypes类型,Class[]并声明该方法采用的参数
params类型,Object[]并声明要传递给方法的参数

文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…

作者建议:我第一时间也想到了反射

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️