-
Notifications
You must be signed in to change notification settings - Fork 0
Manual de Classes
O container Optional do Java é uma alternativa mais segura para representar um valor que pode ou não estar presente. Ele foi introduzido na versão 8 do Java para resolver problemas com referências nulas, que podem causar NullPointerExceptions.
A principal vantagem do Optional é que ele força o desenvolvedor a pensar sobre o caso em que o valor pode não estar presente, o que pode levar a um código mais robusto. Apesar de haver um aumento no Overhead na hora do desenvolvimento, após se acostumar com o uso desse objeto, erros de ponteiros nulos se tornam raros.
-
of(T value): Retorna um Optional com o valor fornecido. -
empty(): Retorna um Optional vazio. -
ofNullable(T value): Retorna um Optional com o valor fornecido, ou um Optional vazio se o valor for nulo. -
isPresent(): Retorna verdadeiro se o Optional contém um valor. -
get(): Retorna o valor se presente; lança uma exceção se não estiver. -
orElse(T other): Retorna o valor se presente; retorna o outro valor se não estiver. -
orElseGet(Supplier<? extends T> other): Retorna o valor se presente; retorna o valor produzido pelo fornecedor se não estiver. -
orElseThrow(Supplier<? extends X> exceptionSupplier): Retorna o valor se presente; lança a exceção produzida pelo fornecedor se não estiver.
Em um projeto como o nosso, com arquitetura controller-service-repository, a checagem de nulo geralmente deve ficar no serviço. Isso porque o serviço deve lidar com a lógica de negócios, que pode incluir a verificação da existência de um recurso.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findUserById(Long id) {
Optional<User> optionalUser = userRepository.findById(id);
return optionalUser.orElseThrow(() -> new ResourceNotFoundException("User not found with id " + id));
}
}Nesse exemplo, userRepository.findById(id) retorna um Optional<User>. Se o User não for encontrado, um ResourceNotFoundException será lançado. Assim, o código garante que um User sempre será retornado ou uma exceção será lançada, evitando o NullPointerException.