繁体   English   中英

java.lang.ClassCastException : java.lang.String 不能转换为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM