从方法内部类获取集合值时遭遇空指针问题求助
问题原因
你遇到的空值问题根源在于内部类MyInnerClass中的Set成员未初始化。虽然用了Lombok的@Data注解,但它只会生成getter、setter、toString等方法,不会自动为集合类型的成员创建实例。当你调用inner.allPeople.add(people)时,allPeople其实是null,要么会抛出NullPointerException,要么最终获取到的集合就是null。
另外你代码里有个小笔误:final Table people = new Table(rs); 这里的Table应该是People吧?因为你的集合是Set<People>类型,否则会出现类型不匹配的编译错误。
解决方法
有两种简单的修复方式:
方式一:在内部类中直接初始化集合
修改MyInnerClass,给两个Set成员默认初始化HashSet实例:
@Data private class MyInnerClass { private Set<People> allPeople = new HashSet<>(); private Set<People> visibleInfo = new HashSet<>(); }
方式二:在getAllResults方法中初始化集合
在创建MyInnerClass实例后,手动为两个Set成员创建实例:
private MyInnerClass getAllResults(Foo resultSets) { MyInnerClass inner = new MyInnerClass(); // 初始化两个Set集合 inner.setAllPeople(new HashSet<>()); inner.setVisibleInfo(new HashSet<>()); for (Foo rs : resultSets) { while (rs.next()) { final People people = new People(rs); // 修正Table为People inner.getAllPeople().add(people); if (isVisible(people)) { inner.getVisibleInfo().add(people); } } } return inner; }
两种方式都能解决空值问题,推荐第一种,代码更简洁且符合封装原则。
内容的提问来源于stack exchange,提问作者pralxx
相关产品推荐
相关产品推荐

