Java:动态地将字符串转换为基元类型



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

我手头有要调用的方法的Method实例(这样我就可以获得其参数的类型),此外,我还有这些参数的值作为String。

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

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

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

我有一个字符串数组的参数:

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

那么,如何将这个String数组转换为包含(int,double,String)的数组呢?我知道我可以遍历所有的基元类型,并尝试解析每个类型中的值。。。有没有更简单的方法?类似于";通用解析";方法

您不应该遍历所有的基元类型并尝试解析每个类型中的值。

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

您可以从commons-beanutils使用ConvertUtils,请参阅[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))。然而,您需要在类型数组上实现循环。。。

首先,您的问题IMHO与反思无关。不能使用反射实例化基元类型。反射仅适用于对象。

如何将这个String数组转换为包含(int,双,字符串)?

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

有没有更简单的方法?类似于"泛型解析"方法。

在标准库中,我不知道有什么类似的东西。我怀疑是否有,因为"25"应该解析为什么?intlongfloatBigInteger?这取决于开发人员,所以您必须自己编写。

相关内容

  • 没有找到相关文章

最新更新