2017-03-28 27 views
0

全体の最初の行の赤は、メッセージに下線が引かれている:Incompatible types. Required: Java.lang.Long. Found: void.互換性のないタイプ - 必須のロングが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; 
      } 
    ... 
    } 

ここでは何が起こっていますか?

+0

' request'さ:

requestOptional<Request>であると仮定すると、あなたはおそらくのようなものをやるべき? –

答えて

3

他のポスターが指摘するように、あなたは間違った方法でifPresentを使用しようとしています。 `java.util.Optional`は

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

要求がオプションであると仮定すると、ifPresentは値を消費し、voidを返します。

コンパイルでは、Longにvoidを割り当てることができないことが正しく伝えられています。

関連する問題