我的代码有点麻烦。我有一个有数据的哈希映射。我想从哈希表中获取数据,到目前为止一切正常,直到我试图得到一个点的坐标。我创建了一个名为“Segments”的类,它包含一个字符串“name”和一个Doubles数组(经度纬度)。它应该用哈希表中的数据填充变量。在调试模式下,我看到了元素的经度和纬度,但它没有将它们放入我指定的数组中,并且打印出错误:
“ClassCastException:java.lang.Object []无法强制转换为java.lang.Double”
这是我的代码。
public class Segments
{
public String name;
public double[] latitude;
public double[] longitude;
public void Read(HashMap<String,Object> segment)
{
this.name = (String) segment.get("name");
Object[] coord = (Object[]) segment.get("coordinates");
try
{
for(int i = 0; i < coord.length; i++)
{
latitude[i] = (Double)coord[0];
longitude[i] = (Double)coord[1];
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
你能告诉我我做错了什么以及如何修改我的代码吗?
答案 0 :(得分:2)
我认为主要问题是你的coord
数组不包含坐标,而是包含坐标数组的数组。因此,解决这个问题的正确方法是:
for(int i = 0; i < coord.length; i++)
{
latitude[i] = (Double)coord[i][0];
longitude[i] = (Double)coord[i][1];
}
注意循环内的第二级数组。
编辑:您可能需要向coord[i]
添加显式广播。试试这些 - 其中一个可能适合你:
latitude[i] = ((Double[])coord[i])[0];
longitude[i] = ((Double[])coord[i])[1];
或
latitude[i] = ((double[])coord[i])[0];
longitude[i] = ((double[])coord[i])[1];
或
latitude[i] = (Double)((Object[])coord[i])[0];
longitude[i] = (Double)((Object[])coord[i])[1];
答案 1 :(得分:1)
您正在尝试将原始对象强制转换为Object。
您可以尝试将值更改为Double或强制转换为double []
这也是一个非常常见的错误,请记住所有基元都不会在Java中扩展Object
试试这段代码:
public class Segments
{
public String name;
public Double[] latitude;
public Double[] longitude;
public void Read(HashMap<String,Object> segment)
{
this.name = (String) segment.get("name");
Double[] coord = (Double[]) segment.get("coordinates");
try
{
for(int i = 0; i < coord.length; i++)
{
latitude[i] = coord[0];
longitude[i] = coord[1];
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
答案 2 :(得分:0)
伙计们我找到了解决方案,当然感谢您的帮助,您指出了正确的方法。 Sop解决方案是我必须声明数组的大小,并且数组(纬度,经度)必须是“double”而不是“Double”,因此要填充数组(纬度,经度),代码必须如下所示:
public class Segments
{
public String name;
public double[] latitude;
public double[] longitude;
public void Read(HashMap<String,Object> segment)
{
this.name = (String) segment.get("name");
Object[] coord = (Object[]) segment.get("coordinates");
//Object[] coord2 = new Object[coord.length];
latitude = new double[coord.length];
longitude = new double[coord.length];
try
{
for(int i = 0; i < coord.length; i++)
{
latitude[i] = (Double)((Object[])coord[i])[0];
longitude[i] = (Double)((Object[])coord[i])[1];
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}