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

Java/Kotlin中为未初始化对象设默认值?解决空指针异常

问题:未初始化对象时默认值失效导致空指针异常

我希望在用户未初始化对象时为其设置默认值,允许请求中不传入参数,但对象仍能拥有默认值。但目前遇到空指针异常,不清楚问题所在。

现有对象定义:

@Builder
@Data
@Valid
@RequiredArgsConstructor
@AllArgsConstructor
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
public class Request {
    private final List<Author> authors;
    private final Config config;

    private Params params;
}


@Builder
@AllArgsConstructor
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@Data
@Setter(AccessLevel.NONE)
public class Params {

  @Builder.Default private boolean adultOnly = false;
}

使用构造器创建对象:

fun main(args: Array<String>) {
    val request = Request(
            authors,
            config(
                key,
                level
            )
        )
}

使用Builder模式也会抛出空指针异常:

val request = QueriesRequest.builder()
            .userQueries(userQueries)
            .configurationKey(
                QueryConfigurationKey(configurationKey,
                    granularityLevel))
            .site(site).build()

request.params.adultOnly // 抛出空指针异常,预期默认值是false
}

问题原因

你遗漏了对Request类中params字段的默认实例初始化:

  • Params类的@Builder.Default仅对自身的Builder生效,只能保证构建Params对象时adultOnly有默认值false。
  • 但Request类的params字段既没有初始化默认值,也没有通过@Builder.Default指定默认实例,所以构建Request时如果不传入params,该字段会保持null,访问request.params.adultOnly自然触发空指针异常。

解决方案

给Request类的params字段添加@Builder.Default注解并初始化默认实例:

@Builder
@Data
@Valid
@RequiredArgsConstructor
@AllArgsConstructor
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
public class Request {
    private final List<Author> authors;
    private final Config config;

    @Builder.Default
    private Params params = new Params();
}

修改后效果:

  • 无论使用构造器还是Builder模式创建Request对象,只要没有显式传入params,该字段都会自动初始化一个默认的Params实例。
  • 结合Params类中adultOnly的默认设置,此时访问request.params.adultOnly就能得到预期的false值,不会再触发空指针异常。

内容的提问来源于stack exchange,提问作者userit1985

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:50:44