2017-03-28 5 views
0

La première ligne entière est rouge soulignée par le message: Incompatible types. Required: Java.lang.Long. Found: void.types incompatibles - Requis longtemps trouvé vide + option <>

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

Ma méthode 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(""); 

utilisateurs POJO:

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

Que se passe-t-il ici?

+0

'' request' java.util.Optional' quels? –

Répondre

3

Comme le soulignent les autres affiches, vous essayez d'utiliser ifPresent dans le mauvais sens.

En supposant que request est un Optional<Request>, vous devriez probablement faire quelque chose comme:

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

En supposant que la requête est un ifPresent en option consomme une valeur et renvoie la valeur vide.

La compilation vous indique correctement que vous ne pouvez pas affecter un vide à un long.