java - 如何用 Java 8 编写 instanceof?

标签 java java-8 instanceof

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

我想根据 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

关于java - 如何用 Java 8 编写 instanceof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28531305/

相关文章:

java - 为什么要在 "Parse"方法内部声明 "onCreate"对象?

java - 如何使用带有@SerializedName 注释的gson 进行序列化?

java - tomcat 9 jdk 1.8 上的 struts tiles 1.3 [错误] 找不到指定 url 的操作配置

java - 使用 Guava 的 ImmutableSortedMap 作为频率图

java - 关于实现扩展接口(interface)的方法的建议

java - 在构造函数中使用 "this instanceof …"或 "getClass()"是否安全?

java - 我如何使用 slick 3.0 一次返回一行?

java - Dagger 2 问题 :@Subcomponent. 没有参数的生成器方法必须返回 @Subcomponent 类型

ubuntu - 无法在 wine Ubuntu 上安装 JDK 8

java - 如何避免使用instanceof/这里如何使用多态