我想解析一些具有相同格式但数字种类不同的字符串(它们包含一些数字)并将这些数字设置为相关数组。例如,有这个字符串:“”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并已填充上述函数。
任何人都可以告诉我为什么会这样,我该如何解决?我真的很感激。
答案 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();