不兼容的类型 - 必需的长期发现 void + Optional<>
Incompatible types - Required Long Found void + Optional<>
整个第一行是红色下划线的消息: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;
}
...
}
这是怎么回事?
假设请求是可选的ifPresent
消耗一个值并且returns无效。
编译正确地告诉您不能将 void 分配给 Long。
正如其他张贴者指出的那样,您试图以错误的方式使用 ifPresent
。
假设 request
是一个 Optional<Request>
,您可能应该这样做:
Optional<Long> userIdMaybe = request.map(r -> r.getUsers().getId());
Optional<Users> employee = userIdMaybe.flatMap(usersRepository::findOne);
整个第一行是红色下划线的消息: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;
}
...
}
这是怎么回事?
假设请求是可选的ifPresent
消耗一个值并且returns无效。
编译正确地告诉您不能将 void 分配给 Long。
正如其他张贴者指出的那样,您试图以错误的方式使用 ifPresent
。
假设 request
是一个 Optional<Request>
,您可能应该这样做:
Optional<Long> userIdMaybe = request.map(r -> r.getUsers().getId());
Optional<Users> employee = userIdMaybe.flatMap(usersRepository::findOne);