0

我想解析一些格式相同但数字类型不同的字符串(它们包括一些数字),并将这些数字设置为它们的相关数组。例如有这个字符串:" "positions":[[35.23,436.34],[23.5, 7.1]] 我想把这些数字放入一个名为 "this"! 的浮点数组中,对于这个字符串""indices":[[ 23,4],[2,1]]" 我想将它们放入一个名为 "that" 的整数数组中!

为此,我使用此声明编写了一个通用函数:

       private <E extends Number> voidfunc(ArrayList<E> array, String JSON){
       .
       .
       array.add((E) NumberFormat.getInstance().parse(JSON.substring(...)));
       .
       .
       }

这很好用,并将数字正确放入数组,但后来,在我的应用程序的某个地方,我得到一个“类转换异常。不能将 Double 转换为 Float”试图这样做:

       floatArray[i] = temp.get(i);

temp 已定义为浮点数组列表并已填充上述函数。

谁能告诉我为什么会这样,我该如何解决?我非常感谢。

4

2 回答 2

2

在您的示例中,E是泛型方法的类型参数。这种类型在运行时是未知的,所以强制转换为这种类型(E)是假的,编译器很可能在这一行报告警告。JVM 在此转换期间不检查类型兼容性,因此不兼容类型的值可能会进入列表。例如,Double类型的值可以存储在List<Float>. 稍后,当您尝试从列表中提取值并将其转换为 时FloatClassCastException将会发生。

您可能需要像这样更改代码:

private void func (ArrayList <? super Double> array, String JSON)
{
    ...
    array.add (NumberFormat.getInstance ().parse (JSON.substring (...)));
    ...
}

ArrayList <Number> temp = new ArrayList ();
func (temp, json);
floatArray [i] = temp.get (i).floatValue ();
于 2013-02-25T13:24:49.147 回答
1

尝试:

floatArray[i] = ((Double) temp.get(i)).floatValue();
于 2013-02-25T13:25:59.833 回答