在以下情况下,是否有更创新的方式来处理空异常?
Is there a more innovative way to handle null exceptions in the following cases?
现在我已经为 Puppy 创建了一个 Response
@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PuppyResponse {
private Long puppyId;
private String name;
private Integer age;
private String breed;
private Long vetId;
private String vetName;
public PuppyResponse(Long puppyId, String name, Integer age, String breed) {
this.puppyId = puppyId;
this.name = name;
this.age = age;
this.breed = breed;
}
public static PuppyResponse of(Puppy puppy) {
Optional<Vet> vet = Optional.ofNullable(puppy.getVet());
if(vet.isPresent()) {
return new PuppyResponse(
puppy.getPuppyId(),
puppy.getName(),
puppy.getAge(),
puppy.getBreed(),
vet.get().getVetId(),
vet.get().getName()
);
}else {
return new PuppyResponse(
puppy.getPuppyId(),
puppy.getName(),
puppy.getAge(),
puppy.getBreed()
);
}
}
public static List<PuppyResponse> listOf(List<Puppy> puppies) {
return puppies.stream()
.map(PuppyResponse::of)
.collect(Collectors.toList());
}
}
dog 属性 vet 可能为 null。
我将 Puppy 设计为根据它是否为 null 使用不同的构造函数,但这似乎不是一个好方法。
当然它没有问题,但我想以更好的方式设计它。我如何处理空值?
如果 puppy.getVet()
为 null,您只想通过使用 orElseGet
提供新的 Veet 对象
Vet vet = Optional.ofNullable(puppy.getVet()).orElseGet(Vet::new);
如果 puppy.getVet()
为 null
如果您想提供默认的 Veet 对象
Vet vet = Optional.ofNullable(puppy.getVet()).orElseGet(PuppyResponse::getDefaultVet);
这样您就不需要检查 ifPresent 并相应地创建响应
return new PuppyResponse(
puppy.getPuppyId(),
puppy.getName(),
puppy.getAge(),
puppy.getBreed(),
vet.getVetId(),
vet.getName()
);
提供默认 Vet 对象
private static Vet getDefaultVet(){
Vet v = new Vet();
v.setVetId(0);
v.setName("Default Name");
return v;
}
现在我已经为 Puppy 创建了一个 Response
@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PuppyResponse {
private Long puppyId;
private String name;
private Integer age;
private String breed;
private Long vetId;
private String vetName;
public PuppyResponse(Long puppyId, String name, Integer age, String breed) {
this.puppyId = puppyId;
this.name = name;
this.age = age;
this.breed = breed;
}
public static PuppyResponse of(Puppy puppy) {
Optional<Vet> vet = Optional.ofNullable(puppy.getVet());
if(vet.isPresent()) {
return new PuppyResponse(
puppy.getPuppyId(),
puppy.getName(),
puppy.getAge(),
puppy.getBreed(),
vet.get().getVetId(),
vet.get().getName()
);
}else {
return new PuppyResponse(
puppy.getPuppyId(),
puppy.getName(),
puppy.getAge(),
puppy.getBreed()
);
}
}
public static List<PuppyResponse> listOf(List<Puppy> puppies) {
return puppies.stream()
.map(PuppyResponse::of)
.collect(Collectors.toList());
}
}
dog 属性 vet 可能为 null。 我将 Puppy 设计为根据它是否为 null 使用不同的构造函数,但这似乎不是一个好方法。 当然它没有问题,但我想以更好的方式设计它。我如何处理空值?
如果 puppy.getVet()
为 null,您只想通过使用 orElseGet
Vet vet = Optional.ofNullable(puppy.getVet()).orElseGet(Vet::new);
如果 puppy.getVet()
为 null
Vet vet = Optional.ofNullable(puppy.getVet()).orElseGet(PuppyResponse::getDefaultVet);
这样您就不需要检查 ifPresent 并相应地创建响应
return new PuppyResponse(
puppy.getPuppyId(),
puppy.getName(),
puppy.getAge(),
puppy.getBreed(),
vet.getVetId(),
vet.getName()
);
提供默认 Vet 对象
private static Vet getDefaultVet(){
Vet v = new Vet();
v.setVetId(0);
v.setName("Default Name");
return v;
}