如何将Alpha对象列表添加到含List<Alpha>成员的Omega类列表元素中
问题解决
先修正原代码的已知错误
- 静态方法调用问题:
testMethod是实例方法,无法在静态的main方法中直接调用,且main方法中传入的参数类型和testMethod要求的List<Omega>不匹配 Alpha类setBob方法逻辑错误:赋值语句写错,没有把入参赋值给成员变量Omega类的beta属性未初始化:直接调用会抛出空指针异常,需要提前初始化- 循环内的x、z作用域问题:两个对象定义在for循环内部,出了循环就无法访问,需要先存入临时列表
核心实现逻辑
要给指定位置的Omega实例添加Alpha列表,只需要两步:
- 用
blue.get(索引)获取对应位置的Omega实例,注意List索引从0开始,第一个元素对应索引0,第二个对应索引1 - 调用该Omega实例中beta属性的
addAll方法,传入待添加的Alpha列表即可
完整修正代码
import java.util.LinkedList; import java.util.List; public class TestClass { public static void main(String[] args) { List<Omega> omegaA = new LinkedList<>(); // 先给omegaA添加测试用的Omega实例 omegaA.add(new Omega()); omegaA.add(new Omega()); new TestClass().testMethod(omegaA); } public void testMethod(List<Omega> blue){ // 先判断列表非空,避免空指针和索引越界 if (blue == null || blue.isEmpty()) { return; } List<Alpha> tempAlphaList = new LinkedList<>(); for (int i = 0; i < blue.size(); i++){ Alpha x = new Alpha(); Alpha z = new Alpha(); x.setBob(i); z.setBob(i); tempAlphaList.add(x); tempAlphaList.add(z); } // 添加到blue的第一个元素(索引0)中 blue.get(0).beta.addAll(tempAlphaList); // 如果blue有至少2个元素,添加到第二个元素(索引1)中 if (blue.size() >= 2) { blue.get(1).beta.addAll(tempAlphaList); } } public static class Omega{ public int number; // 初始化beta属性避免空指针 public List<Alpha> beta = new LinkedList<>(); } public static class Alpha{ public int bob; public int getBob() { return bob; } // 修正set方法赋值逻辑 public void setBob(int x) { this.bob = x; } } }
补充注意点
- 操作前最好先判断blue列表的长度是否大于要访问的索引,避免索引越界异常
- Omega的beta属性建议封装成私有,提供对应的操作方法访问,不要直接暴露公共成员变量
内容的提问来源于stack exchange,提问作者CoderRightInTheProgram
相关产品推荐
相关产品推荐

