我想通过java中的反射来调用方法。
我手边有我要调用的方法的Method实例(所以我可以得到它的参数类型),另外,我把这些参数的值作为字符串。
我假设所有参数都必须是基元。
例如,如果我想调用以下方法:
public static double calc(int a, double b, String op){...}
我将参数作为字符串数组:
String[]: {"25", "34.45", "add"}
那么,我怎样才能将这个String数组转换为包含(int,double,string)的数组? 我知道我可以遍历所有原始类型并尝试解析每种类型的值...是否有更简单的方法?类似“通用解析”的方法。
答案 0 :(得分:3)
您不应该遍历所有原始类型并尝试解析每种类型中的值。
您应该从Method
实例获取每个参数的类型,并根据参数的类型调用适当的方法将String转换为所需的类型:Double.valueOf()
表示双精度(Double.TYPE
),Integer.valueOf()
表示int(Integer.TYPE
)等。
答案 1 :(得分:2)
您可以使用ConvertUtils
中的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))。你需要在类型数组上实现循环...
答案 2 :(得分:0)
首先你的问题恕我直言与反思无关。无法使用反射实例化原始类型。反射仅适用于对象。
如何将此String数组转换为包含(int, double,string)?
你做不到。 Java中的数组不能包含不同的数据类型。解决方法是使用List<Object>
。问题是,这将需要稍后转换来检索元素(有可能获得ClassCastException
)。
有更简单的方法吗?类似“通用解析”的方法。
我在标准库中不知道这样的事情。我怀疑是否有任何因为"25"
解析的内容? int
? long
? float
? BigInteger
?这取决于开发人员,因此您必须自己编写。