首页 > 解决方案 > 反射 - 使用 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 对象。为什么这种匹配不会发生在反射中?我怎样才能让它发挥作用?

标签: javamethodsreflection

解决方案


您应该匹配您的方法签名(参数类型)。

改变

Method m = obj.getClass().getMethod("convert", new Class[] { Long.class });

Method m = obj.getClass().getMethod("convert", new Class[] { Number.class });

推荐阅读