ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double
我的代码有点问题。我有一个包含数据的哈希映射。我想从散列表中获取数据,到目前为止一切正常,直到我尝试获取点的坐标。我创建了一个名为“Segments”的类,它包含一个字符串“name”和一个双精度数组(经度-纬度)。它应该用哈希表中的数据填充变量。在调试模式下,我看到了经度和纬度的元素,但它没有将它们放入我指定的数组中,并打印出一个错误: “ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double” 这是我的密码ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double,java,android,exception,Java,Android,Exception,我的代码有点问题。我有一个包含数据的哈希映射。我想从散列表中获取数据,到目前为止一切正常,直到我尝试获取点的坐标。我创建了一个名为“Segments”的类,它包含一个字符串“name”和一个双精度数组(经度-纬度)。它应该用哈希表中的数据填充变量。在调试模式下,我看到了经度和纬度的元素,但它没有将它们放入我指定的数组中,并打印出一个错误: “ClassCastException:java.lang.Object[]不能强制转换为java.lang.Double” 这是我的密码 publi
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();
}
}
公共类段
{
公共字符串名称;
公共双[]纬度;
公共双[]经度;
公共无效读取(哈希映射段)
{
this.name=(String)segment.get(“name”);
对象[]坐标=(对象[])段。获取(“坐标”);
尝试
{
for(int i=0;i
您能告诉我我做错了什么,以及如何修复代码吗?您正在尝试将一个基本对象强制转换为一个对象 您可以尝试将值do Double或cast更改为Double[] 这也是一个非常常见的错误,请记住,在Java中,所有原语都不扩展对象 请尝试以下代码:
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();
}
}
公共类段
{
公共字符串名称;
公共双[]纬度;
公共双[]经度;
公共无效读取(哈希映射段)
{
this.name=(String)segment.get(“name”);
Double[]坐标=(Double[])段。获取(“坐标”);
尝试
{
for(int i=0;i
我认为主要问题是您的坐标数组不包含坐标,而是包含坐标数组。因此正确的解决方法是:
for(int i = 0; i < coord.length; i++)
{
latitude[i] = (Double)coord[i][0];
longitude[i] = (Double)coord[i][1];
}
或
或
伙计们,我找到了解决方案,当然感谢你们的帮助,你们为我指出了正确的方法。解决方案是,我必须声明数组的大小,数组(纬度、经度)必须是“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();
}
}
公共类段
{
公共字符串名称;
公共双[]纬度;
公共双[]经度;
公共无效读取(哈希映射段)
{
this.name=(String)segment.get(“name”);
对象[]坐标=(对象[])段。获取(“坐标”);
//Object[]coord2=新对象[coord.length];
纬度=新双精度[坐标长度];
经度=新双精度[坐标长度];
尝试
{
for(int i=0;i
}coord[0]的值是多少?
的值是从哈希表接收的,它包含经度和纬度(双值)。它有两个元素经度和纬度。您用于填充线段地图的代码是什么?很抱歉,我不明白,您可以用代码显示给我吗?当您将变量声明为公共双精度[]时,请使用Double
latitude;现在for循环被跳过,并且从未到达;要么是,要么coord包含其他类型的对象。@Paul Jan可能,尽管不是这样,但他的整个逻辑是有缺陷的。他在coord数组上循环,将第一个元素分配给lat,第二个元素分配给long-反复。但是如果coord是两个元素的数组,那又怎么样是循环点还是赋值点?错误:表达式的类型必须是数组类型,但解析为Object@user3182266您可能需要将显式强制转换添加到coord[i]
。我用一些选项更新了我的答案。
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];
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();
}
}