Skip to content

Manual de Classes

Regis Amaral edited this page Jul 13, 2023 · 2 revisions

Optional

Justificativa

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.

Principais Métodos

  • 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.

Exemplo de uso num Service

@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.

Clone this wiki locally