我在名为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对象。为什么这种匹配不通过反射发生?而我该如何运作呢?
答案 0 :(得分:0)
您可以尝试像这样更改方法:
public String convert(Long input) {
return String.valueOf(input);
}
或将调用更改为方法:
Method m = obj.getClass().getMethod("convert", new Class[] { Number.class });
答案 1 :(得分:0)
您应该匹配您的方法签名(参数类型)。
更改
Method m = obj.getClass().getMethod("convert", new Class[] { Long.class });
到
Method m = obj.getClass().getMethod("convert", new Class[] { Number.class });
答案 2 :(得分:0)
使用Number.class
NumberToStringConverter obj = new NumberToStringConverter();
Method m = obj.getClass().getMethod("convert", new Class[] { Number.class });
m.invoke(obj, new Object[] { aLongObject });