1

我想通过java中的反射来调用一个方法。

我手头有我要调用的方法的Method实例(所以我可以获取其参数的类型),此外,我将这些参数的值作为字符串。

我假设所有参数都必须是原语。

例如,如果我想调用以下方法:

public static double calc(int a, double b, String op){...}

我将参数作为字符串数组:

String[]: {"25", "34.45", "add"}

那么,如何将此 String 数组转换为包含 (int, double, string) 的数组?我知道我可以遍历所有原始类型并尝试解析每种类型中的值......有没有更简单的方法?类似于“通用解析”方法。

4

3 回答 3

3

您不应该遍历所有原始类型并尝试解析每种类型的值。

您应该从Method实例中获取每个参数的类型,并根据参数的类型,调用适当的方法将 String 转换为所需的类型: Double.valueOf()对于 double ( Double.TYPE),Integer.valueOf()对于 int ( Integer.TYPE),等等。

于 2013-07-18T10:00:07.530 回答
2

您可以使用ConvertUtilsfrom commons-beanutils,请参阅 [convert方法]( https://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanutils/ConvertUtils.html#convert(java. lang.String , java.lang.Class))。但是,您需要在类型数组上实现循环...

于 2015-12-02T12:16:02.947 回答
1

首先,恕我直言,您的问题与反思无关。原始类型不能使用反射来实例化。反射仅适用于对象。

如何将此字符串数组转换为包含(int,double,string)的数组?

你不能。Java 中的数组不能包含不同的数据类型。一种解决方法是使用List<Object>. 问题是这将需要稍后进行强制转换以检索元素(有可能获得 a ClassCastException)。

有没有更简单的方法?类似于“通用解析”方法。

我在标准库中不知道这样的事情。我怀疑有什么,因为应该"25"解析什么?int? long? float? BigInteger? 这取决于开发人员,因此您必须自己编写。

于 2013-07-18T09:59:41.563 回答