我是 Java 8 可选的新手。我必须更改以下代码:
@RequestMapping(value = "/account",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<UserDTO> getAccount() {
return
Optional.ofNullable(userService.getUserWithAuthorities())
.map(user ->
new ResponseEntity<>(
new UserDTO(
user.getLogin(),
null,
user.getFirstName(),
user.getLastName(),
user.getEmail(),
"",
user.getLangKey(),
user.getAuthorities()
.stream()
.map(Authority::getName)
.collect(Collectors.toList())
),
HttpStatus.OK
)
)
.orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR));
}
我想根据
user
的实例创建不同的ResponseEntity。
我如何编写与以下代码等效的代码:
if(user instanceof Admin )
{
// my logic
}
else if(user instanceof NormalUser)
{
// my logic
}
谢谢
你会这样做:
@RequestMapping(value = "/account",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<UserDTO> getAccount() {
return Optional.ofNullable(userService.getUserWithAuthorities())
.map(user -> {
if (user instanceof Admin) {
//...
}
return new ResponseEntity<>(new UserDTO(...), HttpStatus.OK);
})
.orElse(new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR));
}
但是,如果可以的话,请避免使用
instanceof
运算符。将 isAdmin
方法添加到您的 User
类中:在 Admin
类中,它将返回 true
,在 NormalUser
类中,它将返回 false
。
你的做法。但是,您必须将
u
转换为您想要的类型。
if (u instanceof Admin) {
Admin a = (Admin) u;
// your logic
}
编辑:从 Java 14 开始,您还可以执行以下操作:
if (u instanceof Admin a) {
// your logic
}