[英]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.