如何用Java 8编写instanceof?

如何用Java 8编写instanceof?,java,java-8,instanceof,Java,Java 8,Instanceof,我是Java8的新手。我必须更改以下代码: @RequestMapping(value = "/account", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<UserDTO> getAccount() { return Optional.ofNullable(use

我是Java8的新手。我必须更改以下代码:

@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));
}

谢谢你这样做。但是,您必须将
u
转换为所需的类型

if (u instanceof Admin) {
    Admin a = (Admin) u;
    // your 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));
    }
@RequestMapping(value=“/account”,
method=RequestMethod.GET,
products=MediaType.APPLICATION\u JSON\u值)
公共响应getAccount(){
返回可选的.ofNullable(userService.getUserWithAuthories())
.map(用户->{
if(管理员的用户实例){
//...
}
返回新的ResponseEntity(newuserdto(…),HttpStatus.OK);
})
.orElse(新响应属性(HttpStatus.INTERNAL_SERVER_ERROR));
}

但是,如果可以,请避免使用
instanceof
运算符。将
isAdmin
方法添加到您的
User
类中:在class
Admin
中,它将返回
true
,在class
NormalUser
中,它将返回
false

您的意思是我可以在新的ResponseEntity中添加此逻辑?是的,这将代替UserDTO构造函数调用。@Pracade是的,您可以。
@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));
    }