【问题标题】:java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Longjava.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Long
【发布时间】:2014-10-13 10:56:55
【问题描述】:

我创建了这个用于读取 Linux 正常运行时间的简单示例:

public String getMachineUptime() throws IOException {
    String[] dic = readData().split(" ");

    long s = (long) Array.get(dic, 1);
    return calculateTime(s);
}

private String readData() throws IOException {
    byte[] fileBytes;
    File myFile = new File("/proc/uptime");
    if (myFile.exists()) {
        try {
            fileBytes = Files.readAllBytes(myFile.toPath());
        } catch (java.nio.file.AccessDeniedException e) {
            return null;
        }

        if (fileBytes.length > 0) {
            return new String(fileBytes);
        }
    }
    return null;
}

private String calculateTime(long seconds) {
    int day = (int) TimeUnit.SECONDS.toDays(seconds);
    long hours = TimeUnit.SECONDS.toHours(seconds)
            - TimeUnit.DAYS.toHours(day);
    long minute = TimeUnit.SECONDS.toMinutes(seconds)
            - TimeUnit.DAYS.toMinutes(day)
            - TimeUnit.HOURS.toMinutes(hours);
    long second = TimeUnit.SECONDS.toSeconds(seconds)
            - TimeUnit.DAYS.toSeconds(day)
            - TimeUnit.HOURS.toSeconds(hours)
            - TimeUnit.MINUTES.toSeconds(minute);

    return "Day " + day + " Hour " + hours + " Minute " + minute
            + " Seconds " + second;
}

当我运行代码时,我得到了这个异常:

java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Long

还有其他方法可以转换结果吗?

【问题讨论】:

  • 这一行 .long s = (long) Array.get(dic, 1);
  • 你能帮我解决这个问题吗?

标签: java


【解决方案1】:

我相信你必须更换

long s = (long) Array.get(dic, 1);

long s = Long.valueOf((String) Array.get(dic, 1));

甚至更好:

long s = Long.valueOf(dic[1]);

原因是您的数组由String 对象组成,而直接 转换不起作用。

【讨论】:

  • 我得到这个没有为 valueOf(Object) 方法找到合适的方法 Long.valueOf(String) 不适用(参数不匹配;对象无法转换为字符串)方法 Long.valueOf(long) 不适用适用(参数不匹配;对象不能转换为长)
  • 现在我收到这条消息 java.lang.NumberFormatException: For input string: "634618.11
  • 嗯...这意味着它不是long,而是double。 :)
【解决方案2】:

问题似乎在以下行:

long s = (long) Array.get(dic, 1);
  1. java.lang.reflect.Array的get(Object array, int index)方法返回一个Object实例,不能直接转换为long。

  2. 您可以简单地通过 dic[1] 而不是 Array.get(dic, 1) 访问数组的元素

替换为以下代码:

long s = Long.parseLong(dic[1]);

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 2013-07-25
    • 2021-08-04
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多