从Java中的Long Array异常中获取Long值

时间:2016-04-07 11:27:19

标签: java

我想尝试从Long Array中获取Long值。但我有这个例外:

  

线程中的异常" main" java.lang.ClassCastException:   java.lang.Integer不能强制转换为java.lang.Long

这样的代码:

import java.util.List;        
    public class Bar {        
        private List<Long> departments;      

        public List<Long> getDepartments() {
            return departments;
        }     

        public void setDepartments(List<Long> departments) {
            this.departments = departments;
        }           

    }


import java.util.List;    
import net.sf.json.JSONObject;    
public class Foo {    
    public static void main(String[] args) {    
        String str = "{\"departments\":[20,22]}";
        JSONObject jsonObject = JSONObject.fromObject(str);
        Bar bar = (Bar) jsonObject.toBean(jsonObject, Bar.class);
        List<Long> departments = bar.getDepartments();
        Long depId = departments.get(0);// Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
System.out.println(depId);

    }    
}

6 个答案:

答案 0 :(得分:1)

model: function(params) {
    // Why is params not contain the passed parameter value ?
}

这是一个net.sf json强制转换错误,只是强制转换为字符串

答案 1 :(得分:0)

你可以这样试试,

Long depId = (Long) departments.get(0).intValue();

intValue返回int,然后将其强制转换为Long。

答案 2 :(得分:0)

试试这个

Long depId = departments.get(0).longValue();

编辑:

Integer i = 9;
Long l = i.longValue();
System.out.println(i + "  " + l);

答案 3 :(得分:0)

Long i = Long.valueOf(departments.get(0).toString());将解决您的问题

答案 4 :(得分:0)

toBean()方法使用List<Integer>生成不同的类。 由于这个bug,我认为没有任何理由将Integer强制转换为Long。 将部门更改为List<Integer>或使用另一个JSon Parser。

答案 5 :(得分:0)

JSON本身没有IntegerLong的概念,只知道Number。如果JSONObject不是浮动品脱值,则将数字值或其列表放入Integer对象中。

您将List声明为List<Long>的事实与JSONObject无关,因为此泛型类型信息在编译的类代码(类型擦除)中不可用,departments只是一个对象列表,所以JSONObject很乐意填写Integer对象。

您可以将departments声明为List<Integer>或使用其他转换方法(查看ujulu对您帖子的评论)