Java ArrayLists

时间:2011-07-27 19:18:18

标签: java classcastexception

我正在尝试运行我用Java编写的程序,但我不知道它发生了什么 给我以下错误:

Exception in thread "main" java.lang.ClassCastException: 
java.lang.String cannot be cast to java.util.ArrayList

以下是代码:

 public static ArrayList connections(ArrayList list3) {

        ArrayList connections = new ArrayList();
        int row1 = 1;
        int row2 = 0;
        int col = 0;

        connections.add(new ArrayList());
        ((ArrayList)connections.get(0)).add(0);
        ((ArrayList)connections.get(0)).add(1);

        System.out.print(((ArrayList)connections.get(0)).get(0));

        while(row1 < list3.size()) {


            if(((ArrayList)list3.get(row1)).get(col).equals(((ArrayList)connections.get(row2)).get(col))){
                connections.add(((ArrayList)list3.get(row1)).get(1));
                row1++;
            }

            else {
                connections.add(new ArrayList());
                connections.add(((ArrayList)list3.get(row1)).get(0));
                row2 = row1;
                row1++; 
            }
        }

        return connections;
     }

似乎错误发生在if语句中。有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

if(((ArrayList)list3.get(row1)).get(col).equals(((ArrayList)connections.get(row2)).get(col))){

应该阅读

if(((ArrayList)list3.get(row1)).get(col).equals(( ((ArrayList)connections).get(row2)).get(col))){

您正在构建connections.get(row2),而不是先建立连接,然后对arraylist进行get。

编辑 - 你绝对应该重构代码以使用Java 1.5功能,即泛型。如果这不是一个选项,您应该重构代码以使其更具可读性 - 例如:您的方法称为“连接”,然后您的变量称为“连接”

答案 1 :(得分:2)

您还应该使用泛型而不是强制转换。这样,如果执行此操作,您将在编译时遇到错误,并且您的代码将是类型安全的。泛型只是指定您对编译器使用的类型,以便它可以在编译时检查类型。

示例:

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list.add(new ArrayList<Integer>());

list.get(0).add(0);
list.get(0).add(1);
list.get(0).add(2);

有关generics here.

的更多信息

希望这有帮助。