如何用Java 8编写instanceof?

问题描述 投票:0回答:2

我是 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
}

谢谢

java java-8 instanceof
2个回答
5
投票

你会这样做:

@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


0
投票

你的做法。但是,您必须将

u
转换为您想要的类型。

if (u instanceof Admin) {
    Admin a = (Admin) u;
    // your logic
}

编辑:从 Java 14 开始,您还可以执行以下操作:

if (u instanceof Admin a) {
    // your logic
}
© www.soinside.com 2019 - 2024. All rights reserved.