如何用 Java 8 编写 instanceof?

Pra*_*ede 3 java instanceof java-8

我是 Java 8 Optional 的新手。我必须更改以下代码:

@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));
}
Run Code Online (Sandbox Code Playgroud)

我想根据user. 我如何编写等效于以下代码的代码:

if(user instanceof Admin )
{
// my logic
}
else if(user instanceof NormalUser)
{
// my logic
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Tun*_*aki 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));
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果可以,请避开instanceof运营商。isAdmin向您的User类添加一个方法:在类中Admin,它会返回,true而在类中NormalUser,它会返回false