反射-使用Long和Number args的调用方法

时间:2018-07-31 06:43:21

标签: java methods reflection

我在名为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对象。为什么这种匹配不通过反射发生?而我该如何运作呢?

3 个答案:

答案 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 });