You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从方法内部类获取集合值时遭遇空指针问题求助

问题原因

你遇到的空值问题根源在于内部类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:05:11