当以字符串形式给出方法名称时,如何调用 Java 方法?

2024-03-11

如果我有两个变量:

Object obj;
String methodName = "getName";

在不知道班级的情况下obj,我怎样才能调用由methodName on it?

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


从臀部开始编码,它会是这样的:

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反射 http://java.sun.com/docs/books/tutorial/reflect/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当以字符串形式给出方法名称时,如何调用 Java 方法? 的相关文章

随机推荐

  • 我可以在本地主机环境上测试 shibboleth IdP 和 SP 吗?

    我可以在本地主机环境上测试 shibboleth IdP 和 SP 吗 我只有一台电脑 Win7 Yes你当然可以 在该计算机中下载并安装 SP 和 idP 配置两者的元数据以与本地主机通信 或者为了更好地轻松使用 SP 和 idP 的两个
  • 如何在 Visual Studio 2019 中自动添加分号到行尾

    我的问题类似于如何在 Visual Studio 代码中在行尾添加分号 https stackoverflow com questions 30118344 how to add semicolon to the end of the li
  • 如何以编程方式设置或清除 32BIT 标志?

    编译时 我总是将其设置为 Any CPU 然而 有些客户没有所需二进制文件的 64 位版本 即使在 x64 系统上运行也是如此 在这些情况下 我要求他们使用 corflags exe 32BIT 选项修改我的二进制文件 http msdn
  • 在 Racket 源代码中选择学生语言

    我正在尝试为 DrRacket 编写一个源文件 指定其中一种语言如何设计教学语言的程序 see 球拍文档 http docs racket lang org drracket htdp langs html 我知道我可以在 DrRacket
  • Android 上符合 OpenGL-ES 2.0 所需的最小纹理大小?

    某个硬件是否需要支持最小纹理尺寸才能符合 OpenGL ES 2 0 规范 GL MAX TEXTURE SIZE 值必须至少为 1024 或 2048 或类似的值 我想知道这一点的原因是因为我正在研究使用着色器的东西 因此必须是 Open
  • 通过 Selenium Grid 运行 Selenium IDE 测试

    首先我应该说 我感到遗憾和痛苦noob 但我正在努力改变这一点 我不懂任何编程语言 但通过做足够的研究来完成我需要完成的任何工作 从而成功地 让事情发生 不管怎样 我一直在使用 Selenium IDE 创建 Selenium 测试 但在通
  • MySQL PHPMyAdmin 错误 #1062 - 键“PRIMARY”重复条目“0”

    现在我想添加一个主键id列 但它抛出错误 1062 密钥 PRIMARY 重复输入 0 我已经尝试过这个 向现有表添加主键 https stackoverflow com questions 11794659 add primary key
  • 选择用于实现分布式消息传递算法的编程语言

    基本上 我想实现以下算法并分析使用这些算法构建的系统在不同条件下的行为 八卦协议 多个paxos 一致的散列 我的兴趣在于这些算法 我基本上是在寻找一种编程语言 可以让我快速编写这些算法并深入理解这些算法 我应该选择哪种语言 Java Sc
  • 如何签署由第 3 方提供的发布 iphone 二进制文件?

    我收到了一家外包公司为我工作的公司开发的 iPhone 应用程序 我无权访问源代码 只能访问已编译的二进制文件 我希望能够使用我们的证书 配置信息等对其进行签名 以便我可以将其提交到应用程序商店 我该怎么做呢 我知道的存在codesign但
  • 如何切换到“更多”视图中的选项卡栏项目?

    我正在用 Objective C 为 Iphone Ipad 编写一个应用程序 我在标签栏的 更多 中有一些项目 我想切换到其中一种视图 我该怎么做 通常我会使用 selectedIndex 但它在 更多 选项卡上不起作用 要从更多屏幕选择
  • 使用 for 迭代 python 列表时如何指定类型/类名

    我知道 python 是动态类型语言 但想知道这是否可能 假设我有一个名为 people 的类 Person 的列表 people people append Person james for p in people p name p na
  • PHP(或其他):处理“不可能发生”的异常的策略

    考虑以下代码 class C throws InvalidArgumentException function classCreateInstance class if is string class throw new InvalidAr
  • mysql查询中的正则表达式

    我有 mysql 表值 例如 1 2 1 2 3 1 4 5 1 4 5 12 15 15 45 75 1 5 15 25 35 55 55 65 75 我想选择哪些行的编号为 5 而不是 15 25 或 35 我尝试过使用 LIKE 查询
  • 材质按钮 切换组单选

    我怎样才能强制材质按钮切换组表现得像 RadioGroup 一样 总是至少有一个选定的项目 环境setSingleSelection true 如果您单击组中的按钮两次 还可以增加不选择任何内容的可能性 这是我的代码
  • 暂时禁用 Lollipop CheckBox 上的动画

    我有一个 ListView 其中包含复选框的行 此 ListView 附加了过滤行为 它通过设置新数据来回收这些行 通过一个简单的setData 方法 随着过滤条件的变化 发生这种情况时 任何具有以下属性的回收行checked状态更改将更新
  • Hibernate 4 和 joda-time

    他们婚姻幸福吗 我使用的是最新版本的 hibernate 4 和 1 3 版本joda 时间休眠支持 http www joda org joda time hibernate 我也认为这是当前的最新版本 使用注释时 一切似乎都工作正常 按
  • 使用 Rspec 测试“创建后”

    我正在尝试使用 Rspec 测试 创建后 操作 代码如下 def valid attributes zone gt Flymgr Zone new countries gt Flymgr ZoneCountry first name gt
  • 无需正则表达式即可简单搜索和替换

    我有一个包含各种通配符的文件 我希望能够从 Bash shell 脚本中替换它 我有以下内容 该内容非常有效 直到其中一个变量包含正则表达式特有的字符 VERSION 1 0 perl i pe s VERSION VERSION g tx
  • 经典asp中的vbscript语法

    我有一个 vbscript 我想在其中运行一种asp 我在运行脚本时遇到问题 所以我想我需要一些帮助来确保 asp 知道它是 vvbscript 或其他东西 最后一个脚本是我运行时遇到问题的脚本 这是我所拥有的
  • 当以字符串形式给出方法名称时,如何调用 Java 方法?

    如果我有两个变量 Object obj String methodName getName 在不知道班级的情况下obj 我怎样才能调用由methodName on it 被调用的方法没有参数 并且有一个String返回值 它是Java be