Java 投双到长,奇怪的例外
我正在用Java 投双到长,奇怪的例外,java,json,casting,Java,Json,Casting,我正在用org.JSON.simple解析一个JSON文件,我遇到了一个让我恼火的错误,我无法修复它。希望你能帮助我。 问题是,此代码出现以下异常java.lang.Double无法转换为java.lang.Long “奇怪”的是,如果我将“双变量”更改为“长变量”,会出现以下错误:java.lang.long不能转换为java.lang.double。 你能帮帮我吗 private double[] tminOWaux = new double[7]; private double[] tma
org.JSON.simple
解析一个JSON文件,我遇到了一个让我恼火的错误,我无法修复它。希望你能帮助我。
问题是,此代码出现以下异常java.lang.Double无法转换为java.lang.Long
“奇怪”的是,如果我将“双变量”更改为“长变量”,会出现以下错误:java.lang.long不能转换为java.lang.double
。
你能帮帮我吗
private double[] tminOWaux = new double[7];
private double[] tmaxOWaux = new double[7];
private double[] humOWaux = new double[7];
private double[] windOWaux = new double[7];
public void filtraOW7days(String contenidoOW) throws ParseException{
JSONParser parser = new JSONParser();
try{
Object obj = parser.parse(contenidoOW);
JSONObject jsonList = (JSONObject) obj;
JSONArray list = (JSONArray) jsonList.get("list");
Iterator<String> unitsIterator = list.iterator();
int i = 0;
while(unitsIterator.hasNext()){
Object uJson = unitsIterator.next();
JSONObject uj = (JSONObject) uJson;
this.humOWaux[i] = (double) uj.get("humidity");
this.windOWaux[i] = (double) uj.get("speed");
JSONObject slideContent = (JSONObject) uj.get("temp");
this.tmaxOWaux[i] = (double) slideContent.get("max");
this.tminOWaux[i] = (double) slideContent.get("min");
i++;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
谢谢你抽出时间 我想您的问题在于,您无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语
我会尝试使用
Double.longValue()
而不是直接强制转换。我想您的问题在于无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语
我会尝试使用
Double.longValue()
而不是直接强制转换。我想您的问题在于无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语
我会尝试使用
Double.longValue()
而不是直接强制转换。我想您的问题在于无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语
我会尝试使用
Double.longValue()
而不是直接强制转换。JSONObject实际上是一个HashMap
,可能有不同类型的值
显然,对于while
循环中的数组分配,对get()
的4次调用可能会返回一个Number
对象(一个Long
或一个Double
),在Java
中不允许在这些类型之间进行强制转换
因此,需要一个简单的辅助函数,如
private static long longValue(Object value) {
return (value instanceof Number ? ((Number)value).longValue() : -1);
}
private static double doubleValue(Object value) {
return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
}
其中-1表示无效值(当然可以是任何其他值)。使用instanceof
应该足够快,它还可以覆盖null
值,从而避免NullPointerException
如果要分配的所有数组值都是long
,则后3个分配需要调用longValue()
。如果所有数组值都是double
,则对第一次赋值使用doubleValue()
应该有效,即
this.humOWaux[i] = doubleValue(uj.get("humidity"));
但是,出于安全原因,最好在适用的情况下对所有赋值使用
longValue()
或doubleValue()
。JSONObject实际上是一个HashMap
,可能具有不同类型的值
显然,对于while
循环中的数组分配,对get()
的4次调用可能会返回一个Number
对象(一个Long
或一个Double
),在Java
中不允许在这些类型之间进行强制转换
因此,需要一个简单的辅助函数,如
private static long longValue(Object value) {
return (value instanceof Number ? ((Number)value).longValue() : -1);
}
private static double doubleValue(Object value) {
return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
}
其中-1表示无效值(当然可以是任何其他值)。使用instanceof
应该足够快,它还可以覆盖null
值,从而避免NullPointerException
如果要分配的所有数组值都是long
,则后3个分配需要调用longValue()
。如果所有数组值都是double
,则对第一次赋值使用doubleValue()
应该有效,即
this.humOWaux[i] = doubleValue(uj.get("humidity"));
但是,出于安全原因,最好在适用的情况下对所有赋值使用
longValue()
或doubleValue()
。JSONObject实际上是一个HashMap
,可能具有不同类型的值
显然,对于while
循环中的数组分配,对get()
的4次调用可能会返回一个Number
对象(一个Long
或一个Double
),在Java
中不允许在这些类型之间进行强制转换
因此,需要一个简单的辅助函数,如
private static long longValue(Object value) {
return (value instanceof Number ? ((Number)value).longValue() : -1);
}
private static double doubleValue(Object value) {
return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
}
其中-1表示无效值(当然可以是任何其他值)。使用instanceof
应该足够快,它还可以覆盖null
值,从而避免NullPointerException
如果要分配的所有数组值都是long
,则后3个分配需要调用longValue()
。如果所有数组值都是double
,则对第一次赋值使用doubleValue()
应该有效,即
this.humOWaux[i] = doubleValue(uj.get("humidity"));
但是,出于安全原因,最好在适用的情况下对所有赋值使用
longValue()
或doubleValue()
。JSONObject实际上是一个HashMap
,可能具有不同类型的值
显然,对于while
循环中的数组分配,对get()
的4次调用可能会返回一个Number
对象(一个Long
或一个Double
),在Java
中不允许在这些类型之间进行强制转换
因此,需要一个简单的辅助函数,如
private static long longValue(Object value) {
return (value instanceof Number ? ((Number)value).longValue() : -1);
}
private static double doubleValue(Object value) {
return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
}
其中-1表示无效值(当然可以是任何其他值)。使用instanceof
应该足够快,它还可以覆盖null
值,从而避免NullPointerException
如果要分配的所有数组值都是long
,则后3个分配需要调用longValue()
。如果所有数组值都是double
,则对第一次赋值使用doubleValue()
应该有效,即
this.humOWaux[i] = doubleValue(uj.get("humidity"));
但是,出于安全原因,最好对所有赋值使用longValue()
或doubleValue()
,如适用