如何修复:java.lang.ClassCastException:java.util.ArrayList无法强制转换为java.lang.Integer

时间:2014-08-12 03:23:21

标签: java arraylist

我在尝试运行以下代码时遇到问题:

ArrayList paretoSet=new ArrayList();   // contains a collection of ArrayList
ArrayList<Integer> toPass=new ArrayList<Integer>();
int[] fParetoSet=new int[ParetoSet.size()];
int[] gParetoSet=new int[ParetoSet.size()];

for (int i=0;i<paretoSet.size();i++){
        toPass.clear();
        toPass.add((Integer)paretoSet.get(i));
        int [] totake=calculate(toPass);
        fParetoSet[i]=totake[0];
        gParetoSet[i]=totake[1];       
    }

` 其中claculate(ArrayList x)是一个采用整数arraylist并返回整数数组的方法。我不能让Paretoset成为一个整数的arraylist,因为它会在我的程序的其他部分产生问题。我在 toPass.add((Integer)paretoSet.get(i))行中遇到异常;
as java.lang.ClassCastException:java.util.ArrayList无法强制转换为java.lang.Integer   我该如何解决这个问题呢?   提前致谢

2 个答案:

答案 0 :(得分:2)

如果ParetoSetArrayList的集合,则来电ParetoSet.get(i)将在索引ArrayList返回i。如错误所示,ArrayList不是Integer的类型,也不能转换为pareToSet

其他兴趣点:

  • 你的变量应该是驼峰式的:Paretoset
  • 自动装箱意味着自JDK5
  • 以来,你的for循环中的强制转换是不必要的
  • new ArrayList<Integer>()已声明为原始类型
  • 自liK7 以来,
  • 类型推断使paretoSet变得多余

修改

  • 您的变量应该是驼峰案例:java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.ArrayList<E> All Implemented Interfaces: Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess ,根据Jim的评论

修改

ArrayList既不是概念上的,也不是实际的整数。如果你说句子&#39;列表是一种整数&#39;它没有意义。如果我们检查javadoc的ArrayList,我们可以看到它的继承树是:

ArrayList

因此,我们可以说AbstractList类型为AbstractCollectionInteger,但不是Integer,因为{{1}}不属于{{1}}它的血统。

答案 1 :(得分:0)

你的程序在下面的行中有类型转换问题。 您正在尝试向Integer arryalist添加类型列表的arraylist。这个错了。如果你想将arraylist对象添加到其他arryalist。请使用泛型作为对象。

ArrayList ParetoSet=new ArrayList();   // contains a collection of ArrayList
toPass.add((Integer)ParetoSet.get(i));

这应该如下所示:

ArrayList<ArrayList> ParetoSet=new ArrayList<ArrayList>();  
ArrayList<ArrayList> toPass=new ArrayList<ArrayList>();  
toPass.add(ParetoSet.get(i));

然后你应该改变代码位以适应你的逻辑