Facultatif en Java est un objet conteneur, qui peut contenir une valeur non nulle ou être vide. Son objectif principal est d'éviter les exceptions de pointeur nul lors de l'écriture de code.
L'utilisation complète de Facultatif dans Java 8 est la suivante :
Vous pouvez créer un objet contenant des non-. valeurs nulles via la méthode of() Objet facultatif, par exemple :
Optional<String> optional = Optional.of("value");
Vous pouvez également créer un objet facultatif contenant une valeur éventuellement nulle via la méthode ofNullable(), par exemple : #🎜🎜 #
Optional<String> optional = Optional.ofNullable(null);
String value = optional.get();
if (optional.isPresent()) { // Optional对象包含非空值 } else { // Optional对象为空 }
optional.ifPresent(value -> System.out.println(value));
4. la valeur ou la valeur par défaut dans l'objet facultatif
#🎜 🎜#Vous pouvez utiliser la méthode orElse() pour obtenir la valeur ou la valeur par défaut dans l'objet facultatif, par exemple :String value = optional.orElse("default");
String value = optional.orElseThrow(() -> new RuntimeException("value is null"));
6. Convertissez la valeur de l'objet facultatif
Vous pouvez utiliser la méthode map() pour convertir la valeur de l'objet facultatif en un autre type de valeur, par exemple :
Optional<Integer> optional = Optional.of("123").map(Integer::parseInt);
7. Filtrez la valeur dans l'objet facultatif
Vous pouvez utiliser la méthode filter() pour filtrer la valeur dans l'objet facultatif, par exemple :
Optional<String> optional = Optional.of("value").filter(value -> value.startsWith("v"));
Améliorations de Java 9
Nous avons introduit les fonctionnalités de Java 8. Java 9 ajoute trois méthodes à la classe facultative : or(), ifPresentOrElse() et stream().
Si l'objet contient une valeur, l'expression Lambda ne sera pas exécutée :
@Test public void whenEmptyOptional_thenGetValueFromOr() { User result = Optional.ofNullable(user) .or( () -> Optional.of(new User("default","1234"))).get(); assertEquals(result.getEmail(), "default"); }
Dans l'exemple ci-dessus, si la variable utilisateur est nulle, elle renverra un facultatif, qui contient un objet utilisateur dont l'e-mail est "par défaut". La méthode
ifPresentOrElse() nécessite deux paramètres : un Consumer et un Runnable. Si l'objet contient une valeur, l'action du Consommateur sera exécutée, sinon le Runnable sera exécuté.
Si vous souhaitez effectuer une action lorsqu'il y a une valeur, ou simplement savoir si une certaine valeur est définie, alors cette méthode est très utile :
Optional.ofNullable(user).ifPresentOrElse( u -> logger.info("User is:" + u.getEmail()), () -> logger.info("User not found"));
Supplément : facultatif controverse Cliquez sur
En fait, il y a encore beaucoup de controverses dans l'industrie sur la question de savoir si Optionnel doit être utilisé. D'une part, Optionnel peut forcer les développeurs à gérer des valeurs nulles, mais d'autre part. , Facultatif est très facile à abuser, en particulier Certains développeurs appellent directement la méthode get() ou ifPresent() après avoir obtenu le Facultatif, ce qui ne résout pratiquement aucun problème et augmente la charge de codage.
Voici quelques scénarios de référence pour l'utilisation de Facultatif, comme suit :
Facultatif est généralement utilisé pour renvoyer des valeurs
Facultatif est principalement utilisé pour renvoyer une valeur, son utilisation n'est pas recommandée dans les variables membres ou les paramètres de méthode.
Optional lui-même ne juge pas nul
Les collections n'utilisent pas Facultatif
Traitement fonctionnel des valeurs
Acquisition d'attributs multicouches
Ne pas renvoyer null est mieux que de renvoyer Facultatif
/** * 查询订单,要么返回订单,要么异常 */ public Order getOrderByIdOrExcept(Long orderId){ Order order = orderMapper.getOrderById(orderId); if(order == null){ throw new BizException("根据单号" + orderId + "未查询到订单!"); } return order; } /** * 查询订单,值可能为null */ public Optional<Order> getOrderById(Long orderId){ Order order = orderMapper.getOrderById(orderId); return Optional.ofNullable(order); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!