Java 使用默认值初始化 null 对象

Java initialize null object with default

提问人:userit1985 提问时间:12/2/2022 最后编辑:daniuuserit1985 更新时间:12/4/2022 访问量:106

问:

如果用户未初始化,我正在尝试默认初始化对象。 我希望用户能够不在请求中添加参数,但我将拥有默认值。

我不确定我错过了什么,但我得到了 Null Pointer 异常。

有这个对象

@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
            )
        )

还使用生成器抛出 null 异常

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

request.params.adultOnly // throw NULL , I expected to have the default false.
}

我错过了什么?

对象 null 默认 生成器

评论

0赞 knittl 12/2/2022
params从不设置为值,它仍然是 null
0赞 Christoph Dahlen 12/2/2022
这甚至编译了吗?
0赞 knittl 12/2/2022
这回答了你的问题吗?什么是 NullPointerException,如何修复它?
0赞 userit1985 12/2/2022
@ChristophDahlen,当然。我想知道我是否缺少用于初始化默认值参数的生成器语法(如果未给出)
0赞 userit1985 12/2/2022
@knittl我想,如果用户没有给出,是否有默认的构建器来初始化这个参数。

答:

0赞 knittl 12/4/2022 #1

类中的字段永远不会初始化,并且保持 null。您可以为其设置默认值:paramsRequest

@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 = Params.builder().build();
}

我正在使用 Params 的构建器本身来初始化默认值,以便您也将获得该构建器定义的默认值。