[JAVA] Article 55: Renvoyez judicieusement les options
55. Soyez prudent lors du retour en option
- Avant Java7, lors de l'examen des méthodes qui ne pouvaient pas retourner une valeur dans certaines conditions, il n'y avait pas d'autre choix que de lever une exception ou de renvoyer null. De Java8, l'option de retour facultatif est née.
package tryAny.effectiveJava;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
List<String> l1 = Arrays.asList("paper", "strong", "java", "pepper");
List<String> l2 = new ArrayList<>();
System.out.println(max(l1).get());
System.out.println(max(l2).orElse("no words"));
try {
max(l2).orElseThrow();
} catch (NoSuchElementException e) {
System.out.println(e.getMessage());
}
System.out.println(max(l1).filter(str -> str.length() == 6).map(str -> str.toUpperCase()).get());
}
public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
if (c.isEmpty()) {
return Optional.empty();
}
E result = null;
for (E ele : c) {
if (result == null || ele.compareTo(result) > 0) {
result = Objects.requireNonNull(ele);
}
}
return Optional.of(result);
}
}
- Ne renvoyez pas null d'une méthode pour laquelle Facultatif est la valeur de retour. Si vous faites cela, il ne sert à rien d'introduire Optional.
- Lorsque vous choisissez de retourner facultatif au lieu de renvoyer null ou de lever une exception, sélectionnez avec la même idée (Item71) que pour décider de lever une exception vérifiée.
- Vous ne devez pas envelopper facultatif pour tout ce qui stocke quelque chose comme une collection, une carte, un flux, un tableau, facultatif. Par exemple, il est préférable de renvoyer une liste vide que de renvoyer une <liste > facultative. En effet, si un List vide peut être renvoyé, il n'est pas nécessaire de renvoyer Optional en premier lieu.
- Lorsque vous devez sélectionner une valeur encapsulée facultative comme valeur de retour de la méthode, il peut ne pas être possible de renvoyer le résultat, et si le résultat est nul, l'appelant de la méthode nécessite une attention particulière. Est.
- Ne pas retourner Facultatif pour les classes wrapper int, double, long. OptionalInt, OptionalDouble et OptionalLong sont disponibles, utilisez-les donc.
- N'utilisez pas facultatif comme collection, clé de tableau, valeur ou élément.
- Il est possible d'utiliser Facultatif comme valeur de champ non essentielle pour une instance. (Reportez-vous à la classe traitée dans Item2)