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);2. Obtenez l'objet facultatif La valeur de Vous pouvez obtenir la valeur non nulle dans l'objet facultatif via la méthode get(), par exemple :
String value = optional.get();Si la valeur de l'objet facultatif est nulle, appelez la méthode get(). NoSuchElementException sera levée. Par conséquent, avant d'appeler la méthode get(), il est préférable d'utiliser la méthode isPresent() pour déterminer si l'objet Optionnel contient une valeur non nulle. 3. Déterminez si l'objet facultatif contient une valeur non nulleVous pouvez utiliser la méthode isPresent() pour déterminer si l'objet facultatif contient une valeur non nulle, par exemple :
if (optional.isPresent()) { // Optional对象包含非空值 } else { // Optional对象为空 }# 🎜🎜#Vous pouvez également utiliser la méthode ifPresent() pour effectuer certaines opérations lorsque l'objet facultatif contient des valeurs non nulles, par exemple :
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); }# 🎜 🎜#Étant donné que le code de traitement ultérieur repose sur les données de commande, les données de commande ne peuvent pas être obtenues et le code ne peut pas descendre. Par conséquent, dans la plupart des cas, il est préférable d'utiliser la méthode getOrderByIdOrExcept, qui évite le NPE et augmente la charge de codage. !
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!