![](/img/trans.png)
[英]java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
[英]java.lang.ClassCastException : java.lang.String cannot be cast to java.lang.Long
我正在尝试创建一个提要管理系统。 我为 servlet 创建了一个简单的 get 和 post 请求。 我能够以毫秒为单位成功地将数据存储在数据存储中。
但是当我找回它时
long milliseconds = entity.getProperty("timestamp");
我收到这样的错误
java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Long
这个问题的原因是什么?
好吧,显然在
long milliseconds = entity.getProperty("timestamp");
entity 返回一个String
,您将其分配给long
。 这需要类型转换。
请注意,Entity(或其超类,PropertyContainer) 明确声明
返回的值可能与最初通过 setProperty 设置的类型不同
那么该怎么办? 如果您知道您正在获取一个字符串,并且您想将其解释为一个长字符串:使用正确的转换方法(这不是类型转换)。
long longValue = Long.parseLong(stringValue);
...但在转换实际的非数字字符串的情况下准备NumberFormatException
。
显然,您正在尝试检索要转换为长值的数字格式的字符串。 您要做的第一件事是检查从 entity.getProperty("timestamp") 获得的值是否返回一个数字。 有一个名为Apache Commons Lang 3的特殊库,允许检查您的字符串是否为数字格式。 如果是这种情况,那么您应该将其简单地隐式转换为 long 值。 您的代码应如下所示,假设实体不为空:
import org.apache.commons.lang3.math.NumberUtils;
if(NumberUtils.isCreatable(entity.getProperty("timestamp")){
long milliseconds = Long.parseLong(entity.getProperty("timestamp"));
}
else{
//print the information you want to identify the value of the property
//for example:
System.out.println("The following value cannot be parsed to long : " +
entity.getProperty("timestamp"));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.