【问题标题】:ClassCastException: java.lang.Object cannot be cast to java.lang.IntegerClassCastException:java.lang.Object 无法转换为 java.lang.Integer
【发布时间】:2013-02-27 22:10:00
【问题描述】:

我的问题的根源是我有一个方法可以处理 JDBC 查询并在查询后释放所有连接。将“ResultSet”传递回调用方法。

我发现我不能简单地将 ResultSet 传递回调用方法,因为在 ResultSet 关闭的情况下,任何尝试使用它都会得到一个已经关闭的错误。

所以在关闭资源之前,我会遍历 ResultSet 并将其存储在 ArrayList 中。

由于该方法处理任何查询,我不知道返回的是哪种类型。因此 ArrayList 存储泛型 s。

这工作除了一个表中的一个字段.. 在一个数据库中,即 Integer[] 字段。

我从中得到的是一个 JDBC4Array 对象,我花了很长时间将它放到一个 Integer[] 中以存储在 ArrayList 中。我确实需要它是一个整数 []。

这就是我现在所拥有的......这是在经历了很多沮丧的banjaxxing之后。

在遍历 ResultSet 时,在连接关闭之前,我会这样做:

            // For every row in the ResultSet
            while (rs.next()) {
                // Initialize a ITILRow for this ResultSet row
                ITILRow row = new ITILRow();

                // For each column in this row, add that object to the ITILRow
                for (int colNum=1; colNum<=numCols; colNum++) {
                    Object o = rs.getObject(colNum);

                    // JDBC4Array is a real pain in the butt
                    ArrayList<Integer> tmpList = new ArrayList<Integer>();
                    if (o != null) {
                        if (o.getClass().getSimpleName().endsWith("Array")) {
                            // At least at this time, these Arrays are all Integer[]
                            Array a = (Array) o;
                            Integer[] ints = (Integer[]) a.getArray();
                            for (Integer i : ints) {
                                tmpList.add(i);
                            }
                            o = tmpList;
                        }
                    }

                    row.add(o);
                }

                // Add the ITILRow to allRows
                allRows.add(row);
            }

那么,在调用方法中……

    for (ITILRow row : allRows) {
        ...
        ArrayList comps = (ArrayList) row.getObject(5);
        Integer[] argh = (Integer[]) ((ArrayList<Integer>) comps).toArray();

        ...
    }

我得到:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

我们将不胜感激。我已经把我的大脑绑在这个结上了。

谢谢,

【问题讨论】:

    标签: java classcastexception


    【解决方案1】:

    List#toArray() 返回一个 Object 数组。请改用List#toArray(T[])

    Integer[] arg = (Integer[]) comps.toArray(new Integer[comps.size()]);
    

    【讨论】:

    • 天哪,你的速度很快。谢谢你做到了。耶!我又往前走了!!谢谢谢谢谢谢。
    • 我觉得参数应该是new Integer[0]——传入的对象其实不需要空格,只是用来获取类信息,但必须实例化。
    • @AgilePro:如果传递的数组足够大(至少 comps.size() 个元素),传递的数组将被填充并由 toArray 方法返回。使数组足够大将防止创建相同类型的额外数组。
    • 哦。那讲得通。然后,是的,最好制作一个确切的尺寸。但是,上面缺少“新”。
    • 以这种方式转换为(Integer[]) 甚至是多余的。很好的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2015-12-01
    • 2015-12-02
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多