NullPointer의 Chega는 Codificação에서 선택적으로 유용하게 사용됩니다!
17798 단어 javaapiproductivityprogramming
소개
Semper que estou entrevisstando um novo candidato eu o questiono sobre o uso ou conhecimento do optional, e quase semper ouço a mesma resposta "Já 활용, quando usei o JPA "😢
📦 Caso queira acompanhar a classe completa enquanto lê o artigo acesse ele noGitHub - Optional-Stream-usecase-example
선택 과목
O uso do optional vai muito além do JPA ele veio como uma solução para ser utilizado para simplificar as validações de objetos nulos, neste post vou mostrar a vocês todas as formas de utilizar ele no seu dia dia e com isso reduzir em 99.9% as chances NullPointer와 tornar는 다른 코드보다 더 많이 사용됩니다.
현재
Quando manipulamos optional ele nos entrega uma função que é os .isPresent() que é responsável por nos informar se existe um valor ou se é nulo retorna um booleano falso e existir valor será verdadeiro
private boolean methodExampleReceivesOptional(Optional<String> opt) {
return opt.isPresent();
}
비어 있는
Semper que tiver um método que o retorno poderá ser nulo invés de retornar null retorne .empty()
private void returnEmptyOptional() {
Optional<String> opt = Optional.empty();
if (methodExampleReceivesOptional(opt))
msg(VALUE_FOUND);
else
msg(VALUE_NOT_FOUND);
}
// print: "value not found"
의
Quando tiver certeza que o valor a ser retornado não será nulo, ou quando você for enviar um valor para um método/função que recebe 선택 사항, você devera criar ele utilizando .of(Object)
private void returnOptionalFixValue() {
var opt = Optional.of("Sassine");
if (methodExampleReceivesOptional(opt))
msg(VALUE_FOUND);
else
msg(VALUE_NOT_FOUND);
}
// print: "value found"
Se tentarmos passar um valor direto para o método
methodExampleReceivesOptional("Sassine");
não funcionará pois ele não pode receber um valor que não seja 선택 사항
ofNullable
Neste caso não temos certeza se o valor irá existir ou será nulo, vai dependser do valor gerado então utilizamos o .ofNullable(Object) esse cara é quem iráte esse cara é quem irá te acompanhar para evitar e tratar todos seusus NullPointers agora!
private void returnDynamicOptional() {
Random r = new Random();
var n = r.nextInt((2 - 1) + 1) + 1;
var opt = Optional.ofNullable(n == 1 ? null : "Sassine");
if (methodExampleReceivesOptional(opt))
msg(VALUE_FOUND);
else
msg(VALUE_NOT_FOUND);
}
// print: "value found" or "value not found"
가져 오기
"ifPresent"podemos recuperar o valor contido no optional e manipularmos da forma que quisermos utilizando a chamada .get()
private void getOptionalValue() {
Optional<String> valueOpt = Optional.of("Sassine");
if (methodExampleReceivesOptional(valueOpt))
msg(valueOpt.get());
else
msg(VALUE_NOT_FOUND);
}
// print: Sassine
아니면
Com optional OfNullable seu valor for nulo conseguimos falar para ele nos entregar um valor padrão fixado ou até mesmo chamar outra função para recuperar outro valor utilizando .orElse(Object) ou .orElseGet(() -> args())
private void returnDefaultValueWhenNull() {
String ex = null;
String valueOpt = Optional.ofNullable(ex).orElse("Sassine - Default");
msg("value found > %s".formatted(valueOpt));
String valueOpt2 = Optional.ofNullable(ex).orElse(getName());
msg("value found > %s".formatted(valueOpt2));
String valueOpt3 = Optional.ofNullable(ex).orElseGet(Person::getName);
msg("value found > %s".formatted(valueOpt3));
}
/*
print1: value found > Sassine - Default
print2: value found > Sassine - Function
print3: value found > Sassine - Class
*/
또는Else던지기
Conseguimos fazer com que o 선택적 랜스 uma 예외는 nulo utilizando .orElseThrow(() -> new Exception())에 대한 용맹을 준수합니다.
private void returnCustomExecutionIfNull() {
try {
String ex = null;
Optional.ofNullable(ex).orElseThrow(() -> new RuntimeException("value not found - exception"));
} catch (RuntimeException e) {
msg(e.getMessage());
}
}
//print: value not found - exception
선택적 자바 9+
ifPresentOrElse
Para simplificar os ifPresent eo get, no java 9 foi disponibilizado o .ifPresentOrElse((),()) que simplifica a implementação e a tomada de decisão
private void ifPresentOrElse() {
String ex = null;
Optional.ofNullable(ex)
.ifPresentOrElse(v -> msg(VALUE_FOUND_S.formatted(v)), () -> msg(VALUE_NOT_FOUND));
Optional.ofNullable("Sassine")
.ifPresentOrElse(v -> msg(VALUE_FOUND_S.formatted(v)), () -> msg(VALUE_NOT_FOUND));
}
//print: value not found
//print2: value found > Sassine
getValueOr
Com .or(() -> ...) se o 1 valor não estiver presente ele executa uma ação ... Neste exemplo buscar o valor existente na função getName
private void getValueOr() {
String ex = null;
Optional.ofNullable(ex)
.or(() -> Optional.of(getName()))
.ifPresent(this::msg);
}
//print: Sassine - Function
optionalStream
선택적으로 .stream()을 사용할 수 있고, 스트림에 대한 값을 반환하거나 스트림에 대한 값을 반환할 수 있습니다!
private void optionalStream() {
var list = List.of("AB", "CD");
Optional.ofNullable(list).stream().forEach(l -> {
l.forEach(this::msg);
});
List<String> x = null;
Optional.ofNullable(x).stream().forEach(l -> {
l.forEach(this::msg);
});
}
//print: ABCD
//print2:
Se quiser dar uma olhada/testar o projeto está em meu github ;)
Reference
이 문제에 관하여(NullPointer의 Chega는 Codificação에서 선택적으로 유용하게 사용됩니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sassineasmar/chega-de-nullpointer-comece-a-utilizar-optional-em-sua-codificacao-2ihj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)