


Partagez l'exemple de code de la classe nouvellement introduite Facultatif en Java8
Optional est une classe nouvellement introduite dans Java 8
Il s'agit d'un conteneur qui peut être un objet nul. Si la valeur existe, la méthode isPresent() renverra true et l'appel de la méthode get() renverra l'objet.
java.lang.NullPointerException, tant que vous osez vous qualifier de programmeur Java, vous connaîtrez très bien cette exception. Afin d'éviter que cette exception ne soit levée, nous écrivons souvent du code comme celui-ci :
Person person = people.find("John Smith"); if (person != null) { person.doSomething(); }
Malheureusement, dans la plupart des codes Java, nous oublions souvent de vérifier les références nulles, donc NullPointerException a également suivi .
"Null Sucks." C'est l'évaluation de null par Doug Lea. En tant que programmeur Java, si vous ne savez toujours pas qui est Doug Lea, alors dépêchez-vous et rattrapez les leçons. Sans sa contribution, nous ne pouvons utiliser que l'équipement Java le plus primitif pour gérer le multi-threading.
"J'appelle cela mon erreur d'un milliard de dollars.", qui est qualifié pour dire que c'est l'inventeur de la référence nulle, Sir C. A. R. Hoare. Vous n'êtes pas obligé de connaître Doug Lea, mais vous devez connaître ce vieil homme, sinon vous n'êtes pas qualifié pour utiliser le tri rapide.
Dans le monde Java, une manière courante de résoudre le problème de référence nulle consiste à utiliser le mode Null Object. Dans ce cas, dans le cas de « rien », Null Object est renvoyé et le code client n'a pas besoin de juger s'il est vide. Cependant, cette approche pose certains problèmes. Tout d’abord, nous devons absolument écrire du code pour Null Object, et si nous voulons appliquer ce modèle à grande échelle, nous devons écrire Null Object pour presque toutes les classes.
Heureusement, nous avons une autre option : Facultative. Facultatif est une encapsulation d’objets nullables, et ce n’est pas compliqué à implémenter. Dans certains langages, tels que Scala, l'implémentation facultative devient partie intégrante du langage. Pour les programmeurs Java, Guava nous fournit un support facultatif. Sans plus tarder, parlons d’abord de la façon d’utiliser Facultatif pour compléter le code précédent.
Optional person = people.find("John Smith"); if (person.isPresent()) { person.get().doSomething(); }
Si isPresent() renvoie false ici, cela signifie qu'il s'agit d'un objet vide. Sinon, nous pouvons retirer le contenu et faire ce que nous voulons faire.
Si vous attendez avec impatience une réduction de la taille du code, je crains que vous ne soyez déçu ici. Rien qu’en termes de taille de code, Optionnel contient même plus de code que l’original. Mais la bonne nouvelle est que vous n'oublierez jamais de vérifier null, car ce que nous obtenons ici n'est pas un objet de la classe Person, mais un facultatif.
Ce qui suit est le code pour la pratique personnelle
public class OptionalTest { /** * of后面接给optional设置的值 但是不能为空 如果为空会报空指针异常 * @Title: ofTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void ofTest() { Optional<String> optional = Optional.of("123"); System.out.println(optional.get()); try { optional = Optional.of(null); System.out.println(optional.get()); //get方法是获取optional的值 类型取决于声明的时候 }catch(NullPointerException e) { System.out.println("空指针异常"); } } /** * ofNullable 和of类似 但是ofNullable可以设置null值 如果是Null值得话取值会报NoSuchElementException 异常 * @Title: ofNullableTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void ofNullableTest() { Optional<String> optional = Optional.ofNullable("123"); System.out.println(optional.get()); try { optional = Optional.ofNullable(null); System.out.println(optional.get()); }catch(NoSuchElementException e) { System.out.println("NoSuchElementException 异常"); } } /** * ifPresent用来判断optional中有没有值存在 如果有则为真 * @Title: isPresentTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void isPresentTest() { Optional<String> optional = Optional.ofNullable(null); if(optional.isPresent()) { System.out.println(optional.get()); } else { System.out.println("值为空"); } } /** * ifPresent和isPresent类似 只不过它支持λ表达式 * @Title: ifPresentTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void ifPresentTest() { Optional<String> optional = Optional.ofNullable("123"); optional.ifPresent(var ->{ System.out.println(var); }); } /** * orElse方法,如果值为空的话会用参数中的值去替换 即设置默认值 * @Title: orElseTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void orElseTest() { Optional<String> optional = Optional.ofNullable("123"); System.out.println(optional.orElse("有没有")); optional = Optional.ofNullable(null); System.out.println(optional.orElse("有没有")); } /** * orElseGet方法 和orElse类似 不过此方法接受Supplier接口的实现用来生成默认值 * @Title: orElseGetTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void orElseGetTest() { Optional<String> optional = Optional.ofNullable("123"); System.out.println(optional.orElseGet(()->"123456")); optional = Optional.ofNullable(null); System.out.println(optional.orElseGet(()->"123456")); } /** * map方法 如果有值则会对值进行mapping中的处理 处理结果存在则创建并返回Optional类型的结果 否则返回空 * @Title: mapTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void mapTest() { Optional<String> optional = Optional.ofNullable("abc"); System.out.println(optional.map(var->var.toUpperCase()).get()); } /** * flatMap和map类似 只不过mapping中必须返回Option类型的数据 * @Title: flatMapTest * @Description: TODO * @param: * @return: void * @throws */ // @Test public void flatMapTest() { Optional<String> optional = Optional.ofNullable("abc"); System.out.println(optional.flatMap(var->Optional.of(var.toUpperCase())).get()); } /** * filter对optional进行过滤,mapping中为过滤的条件 如果不满足条件 返回一个为空的Optional * @Title: filterTest * @Description: TODO * @param: * @return: void * @throws */ @Test public void filterTest() { try { Optional<String> optional = Optional.ofNullable("一二三四五六七八"); System.out.println(optional.filter(var ->var.length()>6).get()); System.out.println(optional.filter(var ->var.length()<6).get()); }catch(NoSuchElementException e) { System.out.println("optional的值为空"); } }
[Recommandations associées]
1 Utilisation d'Optional, une nouvelle API en Java. 8 Exemple
2. Analyse Java 8 Tutoriel d'exemple de classe facultatif
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Java8 calcule la date il y a un an ou un an plus tard à l'aide de la méthode minus() pour calculer la date il y a un an packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDatepreviousYear=today.minus(1,ChronoUni

Comment calculer la date une semaine plus tard en Java8 Cet exemple calculera la date une semaine plus tard. La date LocalDate ne contient pas d'informations de temps. Sa méthode plus() est utilisée pour ajouter des jours, des semaines et des mois. La classe ChronoUnit déclare ces unités de temps. Puisque LocalDate est également un type immuable, vous devez utiliser des variables pour attribuer des valeurs après le retour. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Préface Facultatif en Java, il s'agit d'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 Java8 est la suivante : 1. Créez un objet Facultatif Vous pouvez créer un objet Facultatif contenant une valeur non nulle via la méthode of(), par exemple : Facultatifoptional=Optional.of("value"). ; Il peut également être créé via la méthode ofNullable(). Un objet Optionnel contenant une valeur éventuellement nulle, par exemple : Optionnel=Optiona.

Comment utiliser la fonction facultative pour gérer les valeurs nulles en Java En programmation Java, nous rencontrons souvent des situations où les valeurs nulles sont gérées. L'exception de pointeur nul est une erreur courante. Afin d'éviter cette situation, Java8 a introduit la classe facultative pour gérer les situations de valeur nulle. La classe Facultative est une classe conteneur qui peut contenir une valeur non vide ou aucune valeur. En utilisant la classe Optionnel, nous pouvons gérer les situations de valeurs nulles avec plus de élégance et éviter les exceptions de pointeur nul. sous

Classe Clock de Java8 Java8 ajoute une classe Clock pour obtenir l'horodatage actuel ou les informations de date et d'heure dans le fuseau horaire actuel. Là où System.currentTimeInMillis() et TimeZone.getDefault() étaient utilisés auparavant, ils peuvent être remplacés par Clock. packagecom.shxt.demo02;importjava.time.Clock;publicclassDemo10{publicstaticvoidmain(String[]args){//renvoie la base de temps actuelle

Obtenez l'horodatage actuel dans Java8. La classe Instant a une méthode de fabrique statique now() qui renverra l'horodatage actuel, comme indiqué ci-dessous : packagecom.shxt.demo02;importjava.time.Instant;publicclassDemo16{publicstaticvoidmain(String[]args) {Instanttimestamp=Instant.now();System.out.println("Quelle est la valeur de cetinstant"+timestamp.t

Comment utiliser des outils de formatage prédéfinis dans Java8 pour analyser ou formater des dates =DateLocale.parse

Déterminer si deux dates sont égales dans Java8 packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo04{publicstaticvoidmain(String[]args){LocalDatedate1=LocalDate.now();LocalDatedate2=LocalDate.of(2018,2,5) ;if(date1.equals(date2)){System.out.println("Les temps sont égaux");}e
