提问人:userit1985 提问时间:12/2/2022 最后编辑:daniuuserit1985 更新时间:12/4/2022 访问量:106
Java 使用默认值初始化 null 对象
Java initialize null object with default
问:
如果用户未初始化,我正在尝试默认初始化对象。 我希望用户能够不在请求中添加参数,但我将拥有默认值。
我不确定我错过了什么,但我得到了 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.
}
我错过了什么?
答:
0赞
knittl
12/4/2022
#1
类中的字段永远不会初始化,并且保持 null。您可以为其设置默认值:params
Request
@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 的构建器本身来初始化默认值,以便您也将获得该构建器定义的默认值。
评论
params
从不设置为值,它仍然是 null