当前位置: 首页 > 知识库问答 >
问题:

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

蓝宜
2023-03-14

今天好,我有一个设计问题,我不能真正弄明白我的头,我希望我能解释清楚,让所有人都能理解。我有一个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);
}
    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  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成为另一个单例,因为这样我就会在ArrayList ClassA中拥有相同的ClassB对象。有什么更好的实现方法吗?..事先多谢。

共有1个答案

诸葛嘉熙
2023-03-14

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

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

 类似资料:
  • 问题类文件数据类问题(val id:Int,val问题:String,val图像:Int,val选项一:String,val选项二:String,val选项三:String,val选项四:String,val更正答案:Int, 对象文件结果: 对象常量{ 返回问题列表}

  • 问题内容: 使用示例: 假设我有一个课堂电话。我还有另一个上课电话。 类的ArrayList为。 要遍历.. 的Arraylist而不是这样做: 我们可以像这样简单地遍历ArrayList : 现在,我要迭代并打印出所有第3个对象: 现在我的问题是: 与使用常规的for循环不同,我如何使用ArrayList迭代打印出枪支对象列表? 问题答案: 您要遵循与以前相同的模式: 在这种情况下,它将是:

  • 我有档案卡。java和Util。java,我不允许修改它。出于我自己的目的,我创建了一个类Card2,它扩展了Card,并添加了一个方法和一个方法。Util类包含一个采用ArrayList的方法 我的理解是,在这种情况下,

  • 我试图在包含对象ArrayList的类上使用Parcelable。 更新:Station现在也实现了Parcelable,正如Naveen Dew所建议的那样。 车站等级- 当我把图书馆的包裹递给“为声音而制造”服务时,我遇到了一个问题。 java.lang.RuntimeException:无法使用意图启动服务com.tsuryohananov.IsrailiRadio.BackgroundSo

  • 问题内容: 我有一个包含许多对象的ArrayList。我想对相同属性名称的值进行求和。 示例数据为 ProfitAndLossDataDO的* 对象 * 结果将是(人相同时的值总和)- 逻辑类 ProfitAndLossDataDO 谢谢 问题答案: 我会遍历列表并将结果收集在地图中: 编辑: Java 8对接口的增强使我们能够以一种稍微更优雅的方式来实现此方法,中间是令人讨厌的代码块:

  • 问题内容: 我有一个包含许多对象的ArrayList。我想对相同属性名称的值进行求和。 示例数据为 ProfitAndLossDataDO的* 对象 * 结果将是(人相同时的值总和)- 逻辑类 ProfitAndLossDataDO 谢谢 问题答案: 我会遍历列表并将结果收集在地图中: 编辑: Java 8对接口的增强使我们能够以一种稍微更优雅的方式来实现此方法,中间是令人讨厌的代码块: