java - 反射 - 使用 Long 和 Number 参数调用方法
问题描述
我在一个名为 NumberToStringConverter 的类中有以下方法:
public String convert(Number input) {
return String.valueOf(input);
}
我想使用以下代码调用该方法:
NumberToStringConverter obj = new NumberToStringConverter();
Method m = obj.getClass().getMethod("convert", new Class[] { Long.class });
m.invoke(obj, new Object[] { aLongObject });
问题是,我收到以下错误:
java.lang.NoSuchMethodException: NumberToStringConverter.convert(java.lang.Long)
当您编写自己的代码时,Java 允许调用具有 Number 参数和 Long 参数的方法。它会自动将 Long 转换为 Number 对象。为什么这种匹配不会发生在反射中?我怎样才能让它发挥作用?
解决方案
您应该匹配您的方法签名(参数类型)。
改变
Method m = obj.getClass().getMethod("convert", new Class[] { Long.class });
至
Method m = obj.getClass().getMethod("convert", new Class[] { Number.class });
推荐阅读
- azure - IoTHub 事件订阅消息路由和过滤
- scala - 图框和 BFS
- node.js - 使用 node.js 识别 Arduino Micro 何时插入 USB
- python - Selenium 如何统计和跟踪产品的数量
- javascript - 旧的 javascript 应用程序文件阻止读取新的 javascript
- python - Python:jupyter笔记本。密钥环模块。TypeError:entry_points() 得到了一个意外的关键字参数“组”
- java - 如何判断一个流是否有一个或多个管道?
- javascript - 调用 this.setState 后函数变量值重置
- c - 如何在c中打印文件的二进制代码?
- reactjs - 如何使用 Reactjs 让用户在 django 中登录(经过身份验证)?我正在使用 Django rest api 连接 django 并做出反应