Java:动态地将String转换为基本类型

时间:2013-07-18 09:53:53

标签: java reflection casting

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

我手边有我要调用的方法的Method实例(所以我可以得到它的参数类型),另外,我把这些参数的值作为字符串。

我假设所有参数都必须是基元。

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

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

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

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

那么,我怎样才能将这个String数组转换为包含(int,double,string)的数组? 我知道我可以遍历所有原始类型并尝试解析每种类型的值...是否有更简单的方法?类似“通用解析”的方法。

3 个答案:

答案 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"解析的内容? intlongfloatBigInteger?这取决于开发人员,因此您必须自己编写。