ClassCastException:java.lang.Object []无法强制转换为java.lang.Double

时间:2014-02-10 12:30:21

标签: java android exception

我的代码有点麻烦。我有一个有数据的哈希映射。我想从哈希表中获取数据,到目前为止一切正常,直到我试图得到一个点的坐标。我创建了一个名为“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();
        }

    }

你能告诉我我做错了什么以及如何修改我的代码吗?

3 个答案:

答案 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();
    }

}

}