在Java中强制将整数字符串解析为双精度

在Java中强制将整数字符串解析为双精度,java,generics,numbers,Java,Generics,Numbers,如何将一组数字字符串解析为通用数组?我的整个问题可以归结为以下几点: static T[]parseBulk(字符串bulk,类类型)引发ParseException{ NumberFormat NumberFormat=NumberFormat.getInstance(); numberFormat.setParseIntegerOnly(false); String[]elements=bulk.split(“;”); T[]result=(T[])Array.newInstance(类型,

如何将一组数字字符串解析为通用数组?我的整个问题可以归结为以下几点:

static T[]parseBulk(字符串bulk,类类型)引发ParseException{
NumberFormat NumberFormat=NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(false);
String[]elements=bulk.split(“;”);
T[]result=(T[])Array.newInstance(类型,elements.length);
for(int i=0;i
看起来数字是由给定字符串的内容决定结果类型的,这会产生“15.5”的Double和“10”的Long

然后,它在尝试将Long转换为T时很高兴地崩溃了,T是Double

谢谢,

更新:将数字格式添加到源代码中。对不起:)

NumberFormat.parse(字符串源)
返回一个
数字。返回实例的运行时类型可以是
Number
的任何子类,因此,如果它返回
Long
,则无法将其强制转换为
Double
,正如您所了解的那样

如果要强制将
字符串
转换为数字类型,可以将解析器
函数
传递给方法:

static <T extends Number> T[] parseBulk(String bulk, Class<T> type, Function<String,T> parser) {
    String[] elements = bulk.split(";");
    T[] result = (T[])Array.newInstance(type, elements.length);
    for (int i= 0; i< elements.length; i++) {
        result[i] = parser.apply(elements[i]);
    }
    return result;
}
这将输出:

[15.5, 10.0]

numberFormat有什么类型?多么漂亮又有些丑陋的解决方案。但需要Java 8:(我写这篇文章是为了老一点的Android,所以我没有办法。@Anton你可以用Java 7写类似的东西,但它需要更多的代码。你必须创建一些接口来使用,而不是
函数
,并且你必须用匿名类实例而不是方法引用来实现该接口。这样做不会太麻烦我希望在这种情况下(这是一个暂时的解决方案,现在对我来说很有效)。毕竟,Java中没有那么多原始的数字类型。无论如何,谢谢。我真的很享受你的解决方案的美丽和简单。
[15.5, 10.0]