【发布时间】:2014-01-26 16:14:17
【问题描述】:
美好的一天,我有一点设计问题,我无法真正理解,我希望我能解释清楚,让所有人都能理解。我有一个 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);
}
所以当我想在 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 我猜这是来自 ClassB 持有 ClassD 的 ArrayList 因为其他功能正在工作..
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 对象。任何想法更好的实施?..提前非常感谢。
【问题讨论】:
-
ArrayList
或 ArrayList 中没有项请检查 -
新的 ArrayList
(5);创建初始容量为 5 的空列表,而不是包含 5 个项目的列表