国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison Java javaDidacticiel Posture correcte pour utiliser Java8 Facultatif

Posture correcte pour utiliser Java8 Facultatif

Jan 18, 2017 pm 03:24 PM

Langage de programmation Java

Java est un langage de programmation orienté objet qui peut écrire des logiciels d'application multiplateformes. Il s'agit d'un langage de programmation Java et d'une plate-forme Java lancés par Sun Microsystems en mai 1995. (C'est-à-dire que le nom général de JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)).


Nous savons que Java 8 a ajouté des API très utiles, dont l'une est facultative. Si vous ne l'explorez pas un peu, vous pensez simplement que c'est possible. résoudre élégamment le problème NullPointException, donc le code a commencé à être écrit comme ceci

Optional<User> user = ……
if (user.isPresent()) {
return user.getOrders();
} else {
return Collections.emptyList();
}

Ensuite, nous devons dire que notre réflexion est toujours au même endroit, mais nous pensons instinctivement que ce n'est qu'un wrapper pour l'instance User, qui est différente de ce que nous avons écrit auparavant ??>

User user = …..
if (user != null) {
return user.getOrders();
} else {
return Collections.emptyList();
}
Il n'y a essentiellement aucune différence. C'est la posture correcte pour utiliser les types facultatifs de Java 8 dont nous allons parler.

Pendant les Jeux olympiques de Rio, les informations ont mentionné à plusieurs reprises le drapeau rouge cinq étoiles. Il y a un problème, mais je ne vois rien de mal, peu importe comment je le regarde. Plus tard, j'ai découvert que la posture de la petite étoile adorait le. Le centre est faux.Par conséquent, nous ne devons pas prendre pour acquis les choses auxquelles nous sommes habitués, et nous ne ressentirons rien de mal du tout.En d'autres termes, lorsque nous passons à Java 8 facultatif, nous ne pouvons pas hériter de la fa?on dont nous sommes. traité comme nul dans le passé. Nous devrions ma?triser la nouvelle et correcte posture d'utilisation correcte de Java 8 Facultatif

Simple En parlant de cela, lorsque nous utilisons encore Facultatif des manières suivantes, nous devons commencer à nous vérifier <. ??>

Lors de l'appel de la méthode isPresent()

Lors de l'appel de la méthode get()

Lorsque le type facultatif est utilisé comme attribut de classe/instance

Lorsque le type facultatif est utilisé comme paramètre de méthode

isPresent() n'a aucune différence avec obj != null, et nos vies sont toujours choquantes à chaque étape. Cependant, les appels get() sans isPresent() le feront. recevoir des avertissements dans IntelliJ IDEA

L'utilisation de types facultatifs comme attributs ou paramètres de méthode est fortement déconseillée dans IntelliJ IDEA
Reports calls to java.util.Optional.get() without first checking with a isPresent() 
call if a value is available. If the Optional does not contain a value, get() will throw an exception. 
(調用 Optional.get() 前不事先用 isPresent() 檢查值是否可用. 假如 Optional 不包含一個值, get() 將會拋出一個異常)

Donc, ce sur quoi nous pouvons vraiment compter dans facultatif devrait être autre méthodes en plus de isPresent() et get()?:
Reports any uses of java.util.Optional<T>, java.util.OptionalDouble, java.util.OptionalInt, 
java.util.OptionalLong or com.google.common.base.Optional as the type for a field or a parameter. Optional was designed
 to provide a limited mechanism for library method return types where there needed to be a clear way to represent 
 “no result”. Using a field with type java.util.Optional is also problematic if the class needs to be Serializable, 
 which java.util.Optional is not. (使用任何像 Optional 的類型作為字段或方法參數都是不可取的. Optional 只設計為類庫方法的,
  可明確表示可能無值情況下的返回類型. Optional 類型不可被序列化, 用作字段類型會出問題的)

public Facultatif map(Function mapper)

public T ouElse(T autre )

public T orElseGet(Fournisseur autre)

public void ifPresent(Consumer consommateur)

public Facultatif Prédicat prédicat)

public Facultatif flatMap (Fonction> mapper)

public exceptionSupplier) throws Trions les méthodes ci-dessus.

Tout d'abord, je dois mentionner les trois méthodes de construction de Optionnel?: Optionnel.of(obj), Optionnel.ofNullable (obj) et l'expliciteOptional.empty()

Optional.of(obj)?: il nécessite que l'obj entrant ne puisse pas être une valeur nulle, sinon vous obtiendrez une NullPointerException avant d'entrer dans le r?le.

Optional.ofNullable( obj)?: Il construit une instance Facultative de manière intelligente et tolérante. Tous les arrivants sont les bienvenus. Passez null et obtenez Optionnel.empty(). Si ce n'est pas null, appelez Optionnel.of(obj). .

Est-ce que cela signifie que nous devons simplement utiliser Optionnel.ofNullable(obj) une fois pour toutes, et construire l'instance Optionnelle d'une manière qui ne change pas et s'adapte au deuxième changement?? Dans ce cas, sinon pourquoi Option.of(obj) devrait-il être exposé comme ceci ? Privé Est-ce possible ?

Mon point de vue personnel est le suivant?: 1. Quand nous sommes très, très clairs sur le fait que le paramètre obj doit être transmis toOptional.of(obj) ne peut pas être nul, par exemple, c'est un objet qui vient d'être nouveau (Optional.of(new User(...))), ou une constante non nulle; Nous voulons affirmer que obj n'est pas nul, c'est-à-dire que nous voulons signaler immédiatement une NullPointException au cas où obj est nul, immédiatement. Lors de la modification au lieu de masquer l'exception de pointeur nul, nous devons utiliser de manière décisiveOptional.of(obj) pour construire l'exception de pointeur nul. instance, sans permettre à aucune valeur nulle imprévisible de profiter de l'opportunité de se cacher dans l'option.

Commen?ons maintenant à utiliser une instance facultative existante. Supposons que nous ayons une instance d'utilisateur Facultatif. quelques méthodes courantes à éviter if(user.isPresent()) { ... } else { ... } Plusieurs méthodes d'application

seront renvoyées si elle existe, sinon, une valeur par défaut. sera fourni

S'il existe, il sera renvoyé, sinon, il sera généré par une fonction

return user.orElseGet(() -> fetchAUserFromDatabase()); //而不要 return user.isPresent() ? user: fetchAUserFromDatabase();

存在才對它做點什么

user.ifPresent(System.out::println);

//而不要下邊那樣
if (user.isPresent()) {
  System.out.println(user.get());
}

map 函數隆重登場

當 user.isPresent() 為真, 獲得它關聯(lián)的 orders, 為假則返回一個空集合時, 我們用上面的 orElse, orElseGet 方法都乏力時, 那原本就是 map 函數的責任, 我們可以這樣一行

return user.map(u -> u.getOrders()).orElse(Collections.emptyList())

//上面避免了我們類似 Java 8 之前的做法
if(user.isPresent()) {
  return user.get().getOrders();
} else {
  return Collections.emptyList();
}

map 是可能無限級聯(lián)的, 比如再深一層, 獲得用戶名的大寫形式

return user.map(u -> u.getUsername())
           .map(name -> name.toUpperCase())
           .orElse(null);

這要擱在以前, 每一級調用的展開都需要放一個 null 值的判斷

User user = .....
if(user != null) {
  String name = user.getUsername();
  if(name != null) {
    return name.toUpperCase();
  } else {
    return null;
  }
} else {
  return null;
}

針對這方面 Groovy 提供了一種安全的屬性/方法訪問操作符 ?.

user?.getUsername()?.toUpperCase();

Swift 也有類似的語法, 只作用在 ?Optional 的類型上.

用了?isPresent()?處理 NullPointerException 不叫優(yōu)雅, 有了 ?orElse, orElseGet 等, 特別是?map?方法才叫優(yōu)雅.

其他幾個,?filter()?把不符合條件的值變?yōu)?empty(), ?flatMap()?總是與?map()?方法成對的, ?orElseThrow()?在有值時直接返回, 無值時拋出想要的異常.

一句話小結: 使用?Optional?時盡量不直接調用?Optional.get()?方法,?Optional.isPresent()?更應該被視為一個私有方法, 應依賴于其他像?Optional.orElse(),?Optional.orElseGet(),?Optional.map()?等這樣的方法.

最后, 最好的理解 Java 8 Optional 的方法莫過于看它的源代碼?java.util.Optional, 閱讀了源代碼才能真真正正的讓你解釋起來最有底氣, Optional 的方法中基本都是內部調用 ?isPresent()?判斷, 真時處理值, 假時什么也不做.

以上就是使用 Java8 Optional 的正確姿勢的內容,更多相關內容請關注PHP中文網(m.miracleart.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel PHP
1502
276
Comment calculer la date il y a un an ou un an plus tard en Java 8 ? Comment calculer la date il y a un an ou un an plus tard en Java 8 ? Apr 26, 2023 am 09:22 AM

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 utilisant Java 8 ? Comment calculer la date une semaine plus tard en utilisant Java 8 ? Apr 21, 2023 pm 11:01 PM

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[

Quelles sont les méthodes facultatives couramment utilisées en Java?? Quelles sont les méthodes facultatives couramment utilisées en Java?? May 09, 2023 am 11:34 AM

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.

Quelles sont les méthodes de comparaison de dates en Java8 ? Quelles sont les méthodes de comparaison de dates en Java8 ? Apr 29, 2023 pm 04:46 PM

Méthodes de comparaison de dates Java8 Dans Java8, vous pouvez utiliser les nouveaux isBefore(), isAfter(), isEqual() et compareTo() pour comparer LocalDate, LocalTime et LocalDateTime. L'exemple suivant pour comparer deux java.time.LocalDate@TestvoidtestDateCompare4() throwsParseException{DateTimeFormattersdf=DateTimeFormatter.ofPattern("aaaa-MM-jj&quot

Comment utiliser la classe Clock en Java8 Comment utiliser la classe Clock en Java8 Apr 25, 2023 pm 03:37 PM

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

Comment gérer le cas de valeur nulle à l'aide de la fonction facultative en Java Comment gérer le cas de valeur nulle à l'aide de la fonction facultative en Java Oct 20, 2023 am 10:06 AM

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

Comment gérer les fuseaux horaires en Java8 Comment gérer les fuseaux horaires en Java8 Apr 27, 2023 pm 09:22 PM

Gestion des fuseaux horaires dans Java 8 Java 8 sépare non seulement la date et l'heure, mais également les fuseaux horaires. Il existe désormais une série de classes distinctes telles que ZoneId pour gérer des fuseaux horaires spécifiques et ZoneDateTime pour représenter l'heure dans un certain fuseau horaire. Cela a été fait par la classe GregorianCalendar avant Java8. L'exemple suivant montre comment convertir l'heure de ce fuseau horaire en heure d'un autre fuseau horaire. packagecom.shxt.demo02; importjava.time.LocalDateTime; importjava.time.ZoneId; importjava.time.ZonedDateT

Comment obtenir l'horodatage actuel en Java8 Comment obtenir l'horodatage actuel en Java8 May 01, 2023 am 11:46 AM

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

See all articles