不兼容的类型 - 必需的Long Found void + Optional<>

时间:2017-03-28 08:35:29

标签: java optional incompatibility

整个第一行带有红色下划线,并显示消息:Incompatible types. Required: Java.lang.Long. Found: void.

Long userId = request.ifPresent(x -> x.getUsers().getId());
Optional<Users> employee = usersRepository.findOne(userId);

我的findOne方法:

// fetch an individual user by ID
Optional<Users> user = usersRepository.findOne(1L);
log.info("User found with findOne(1L):");
log.info("--------------------------------");
log.info(user.toString());
log.info("");

用户POJO:

    @Entity
    public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="user_id")
    private Long id;
    ...
        public Long getId() {
                return id;
            }
    ...
    }

这里发生了什么?

2 个答案:

答案 0 :(得分:3)

正如其他海报所指出的那样,你试图以错误的方式使用ifPresent

假设requestOptional<Request>,您可能会做类似的事情:

Optional<Long> userIdMaybe = request.map(r -> r.getUsers().getId());
Optional<Users> employee = userIdMaybe.flatMap(usersRepository::findOne);

答案 1 :(得分:2)

假设请求是一个可选ifPresent消耗一个值并返回void。

编译正确地告诉您不能将void分配给Long。