在使用numberFormat解析数字后,Float arraylist中的双元素

时间:2013-02-25 13:18:44

标签: java casting number-formatting

我想解析一些具有相同格式但数字种类不同的字符串(它们包含一些数字)并将这些数字设置为相关数组。例如,有这个字符串:“”position“:[[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 to Float”尝试执行此操作:

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

temp已定义为float arraylist并已填充上述函数。

任何人都可以告诉我为什么会这样,我该如何解决?我真的很感激。

2 个答案:

答案 0 :(得分:2)

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

您可能需要更改代码:

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 ();

答案 1 :(得分:1)

尝试:

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