簡體   English   中英

類對象的ArrayList上的Java.lang.IndexOutOfBoundException

[英]Java.lang.IndexOutOfBoundException on ArrayList of Class Objects

美好的一天,我有一些設計問題,我無法真正理解,我希望我可以清楚地解釋它,以供所有人理解。 我有一個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只是吸氣劑和吸氣劑的一類,所以我的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);
    }

這樣,當我想將ClassA對象與classB和classD對象一起列出時,我會

 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,因為其他功能正在起作用。

  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對象。 有更好的實現方案嗎?。非常感謝。

對不起,但是我需要提高我的英語水平。

問題應該如下:如果getclassb返回B的數組,但其中一個未初始化,則執行.getClassD,然后java拋出異常

this.ClassD.get(this.ClassD.size() - 1)和另一行類似的代碼中,是否總是保證size()調用返回的值大於零? 換句話說,您可以保證列表始終至少包含一個元素嗎? 顯然不是,所以是的,這是一個糟糕的設計。

您的getLastClassX()方法應該准備返回null ,因此在嘗試以size()-1獲得項目之前,請在列表上調用!isEmpty()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM