Exemple de contre-mesure NullPointerException (facultatif) pour Java8 ou version ultérieure

À propos de cet article

J'ai trouvé une nouvelle façon de gérer NullPointerException dans Java8, je vais donc l'écrire comme un rappel.

un événement

J'essaierai d'éteindre le visqueux immédiatement.

java



public class Test {
	public static void main(String[] args) {
		String str = null;
		System.out.print(str.length());
	}
}

Résultat du traitement


Exception in thread "main" java.lang.NullPointerException
	at Test.main(Test.java:6)

J'ai une NullPointerException. Comme solution de contournement implémentée à partir de java8, en ajoutant facultatif NullPointer peut être traité. Changez avec l'image ci-dessous.

Exemple d'action


import java.util.Optional;

public class Test {

	public static void main(String[] args) {
		String str = null;
//		System.out.print(str.length());
		
		Optional<String> strOpt = Optional.ofNullable(str);
		strOpt.ifPresent(v -> System.out.println(v.length()));
	}
}

Le processus s'est terminé sans aucune exception NullPointerException.

Bref commentaire

ʻOptional` est implémenté dans java8 et versions ultérieures https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html

Optional<String> strOpt = Optional.ofNullable(str);

Vous pouvez utiliser la fonction ʻofNullable () en encapsulant str avec ʻOptional. En tant qu'argument de la fonction ʻifPresent Enregistrez le contenu destr dans la variable v` et utilisez-le dans la structure du système. Cette méthode est appelée une expression lambda, et c'est une nouvelle fonction implémentée à partir de java8 avec Optional.

strOpt.ifPresent(v -> System.out.println(v.length()));

Au fait, un mauvais exemple d'utilisation de ʻis Present et get () `... (Ajouté le 31/07/2020)

Au début, j'ai écrit l'exemple suivant comme un modèle différent, mais la méthode suivante semble être *** une solution de contournement mortelle **. Je le posterai comme un mauvais exemple avec un commandement à moi-même. Vous pouvez le voir en lisant cet article https://qiita.com/BlueRayi/items/ef46496ef2ef36b9cbb7#%E3%81%AA%E3%82%8B%E3%81%B9%E3%81%8Foptionalifpresent%E3%82%82%E4%BD%BF%E3%81%86%E3%81%AA ( Lorsque vous lisez cet article, il semble que la vérification Null elle-même en utilisant Facultatif est absurde en premier lieu.)

mauvais exemple


import java.util.Optional;

public class Test {
	public static void main(String[] args) {
		String str = null;
//		System.out.print(str.length());
		
		Optional<String> strOpt = Optional.ofNullable(str);
		if(strOpt.isPresent()) {
			String message = strOpt.get();
			System.out.println(message.length());
		}
	}
}

Plus précisément, il est facile d'implémenter la méthode de get () la valeur en utilisant isPresent () dans l'instruction if. Il est bon de penser que la fonction isPresent () est utilisée lorsqu'elle est inévitable car le mérite d'utiliser Optional n'est pas utilisé, et l'article suivant semble être facile à comprendre en termes de nuance.

Vous devriez rarement utiliser get. Le but de l'utilisation d'Optionnel est le message "S'il n'y a pas de valeur, veuillez le faire." Si vous obtenez soudainement une exception en utilisant> get, c'est la même chose que d'obtenir une NullPointerException.

https://irof.hateblo.jp/entry/2015/05/05/071450

Recommended Posts

Exemple de contre-mesure NullPointerException (facultatif) pour Java8 ou version ultérieure
Comment déboguer à distance Java 9 ou version ultérieure
Consulter le mémo de la copie de fichier de Java 1.7 ou version ultérieure
Demandez n jours ouvrables plus tard avec JAVA
Pour l'apprentissage JAVA (2018-03-16-01)
Java Type facultatif
Étudier Java 8 (facultatif)
IDE 2017 pour Java
Java pour instruction
[Java] Mémorandum facultatif
Java 9 Facultatif :: stream
Exemple de programme d'entrée / sortie de fichier Java (jdk1.8 ou version ultérieure)
[Gradle] Générer Javadoc, y compris JavaScript dans Java 1.8.0_121 ou version ultérieure