类对象的ArrayList上的Java.lang.IndexOutOfBoundException

时间:2014-01-26 16:14:17

标签: java arraylist

美好的一天,我有一些设计问题,我无法真正理解,我希望我能清楚地解释清楚,让所有人明白。我有一个ClassA,它是一个包含ClassB的Arraylist的单例,所以ClassA是:

   private classA(){
    //private constructor
}

public static synchronized classA getClassA(){
    if(ClassA == null){         
        ClassA = new ClassA();
    }
    return ClassA;
}

private ArrayList<ClassB> classb = new ArrayList<ClassB>(5);

public ArrayList<ClassB> getClassB(){
    return this.classb;
}

public ClassB getLastClassB() {
    return this.classb.get(this.classb.size() - 1);
}

在ClassB中,我有一个ClassD的ArrayList,其中ClassD只是一类getter和setter,所以我的ClassB是:

    public ClassB() {

}

private ArrayList<ClassD> classd = new ArrayList<ClassD>();


    public ArrayList<ClassD> getClassD(){
        return this.ClassD;
    }

    public ClassD getLastClassD() {
        return this.ClassD.get(this.ClassD.size() - 1);
    }

这样当我想要使用classB和classD对象的ClassA对象中的列表时,我会

 ClassA  A = ClassA.getClassA();


        Class B B = new ClassB();

         ClassD D = new ClassD();
           //do some setters here for D

           B.getClassD.add(D)

           // do some things in B

           A.getClassB.add(B)

但是当我尝试在另一个类中访问它时,我得到一个java.lang.IndexOutOfBoundsException:Index:0,Size:0我猜这是来自持有ClassD的ArrayList的ClassB,因为其他功能正在运行.. < / p>

  for(int i = 0; i < classA.getClassB.size(); i++)
   if(classA.getClassB().get(i).getClassD().size() > 0){ //java.lang.indexOutOfBoundsException

任何想法可能是错误的还是我的设计实现方式?我不能使ClassB成为另一个Singleton因为那样我将在ArrayList ClassA中拥有相同的ClassB对象。有没有更好的实施的想法?..非常感谢提前。

2 个答案:

答案 0 :(得分:0)

抱歉,但我需要提高英语水平。

问题应该如下: 如果getclassb返回一个B数组,但其中一个没有初始化,那么你执行.getClassD然后java抛出异常

答案 1 :(得分:0)

this.ClassD.get(this.ClassD.size() - 1)和另一个类似的代码行中,size()调用是否始终保证返回大于零的值?换句话说,你能保证列表总是至少有一个元素吗?显然不是,所以是的,这是一个糟糕的设计。

您的getLastClassX()方法应该准备好返回null,因此在尝试获取大小() - 1的项目之前,请在列表中调用!isEmpty()