Heim Java javaLernprogramm Teilen Sie den Beispielcode der neu eingeführten Klasse Optional in Java8

Teilen Sie den Beispielcode der neu eingeführten Klasse Optional in Java8

May 24, 2017 am 11:41 AM

Optional ist eine neu eingeführte Klasse in Java 8
Dies ist ein Container, der das kann sei ein Nullobjekt. Wenn der Wert vorhanden ist, gibt die Methode isPresent() true zurück und der Aufruf der Methode get() gibt das Objekt zurück.
java.lang.NullPointerException: Solange Sie es wagen, sich selbst als Java-Programmierer zu bezeichnen, sind Sie mit dieser Ausnahme bestens vertraut. Um zu verhindern, dass diese Ausnahme ausgelöst wird, schreiben wir oft Code wie diesen:

Person person = people.find("John Smith");
if (person != null) {
 person.doSomething();
}
Nach dem Login kopieren

Leider vergessen wir in den meisten Java-Codes oft, nach Nullverweisen zu suchen, daher folgte auch NullPointerException .
„Null Sucks.“ Das ist Doug Leas Einschätzung von Null. Wenn Sie als Java-Programmierer immer noch nicht wissen, wer Doug Lea ist, dann beeilen Sie sich und machen Sie die Lektionen nach. Ohne seinen Beitrag können wir nur die primitivste Ausrüstung von Java verwenden, um Multithreading zu handhaben.
„Ich nenne es meinen Milliarden-Dollar-Fehler.“, der dies behaupten kann, ist der Erfinder der Nullreferenz, Sir C. A. R. Hoare. Sie müssen Doug Lea nicht kennen, aber Sie müssen diesen alten Mann kennen, sonst sind Sie nicht für die schnelle Sortierung qualifiziert.
In der Java-Welt ist die Verwendung des Null-Object-Modus eine gängige Methode zur Lösung des Nullreferenzproblems. In diesem Fall wird im Fall von „nichts“ ein Nullobjekt zurückgegeben, und der Clientcode muss nicht beurteilen, ob es leer ist. Allerdings gibt es bei diesem Ansatz einige Probleme. Zuerst müssen wir unbedingt Code für Null Object schreiben, und wenn wir dieses Muster maßstabsgetreu anwenden wollen, müssen wir Null Object für fast jede Klasse schreiben.

Zum Glück haben wir noch eine weitere Option: Optional. Optional ist eine Kapselung von Nullable-Objekten und die Implementierung ist nicht kompliziert. In einigen Sprachen, wie z. B. Scala, wird die optionale Implementierung Teil der Sprache. Für Java-Programmierer bietet Guava optionalen Support. Lassen Sie uns ohne weitere Umschweife zunächst darüber sprechen, wie Sie Optional verwenden, um den vorherigen Code zu vervollständigen.

Optional person = people.find("John Smith");
if (person.isPresent()) {
 person.get().doSomething();
}
Nach dem Login kopieren

Wenn isPresent() hier false zurückgibt, bedeutet dies, dass es sich um ein leeres Objekt handelt. Andernfalls können wir den Inhalt herausnehmen und tun, was wir tun möchten.
Wenn Sie sich auf eine Reduzierung der Codegröße freuen, werden Sie hier leider enttäuscht sein. Allein hinsichtlich der Codegröße verfügt Optional sogar über mehr Code als das Original. Aber das Gute ist, dass Sie nie vergessen werden, nach Null zu suchen, denn was wir hier bekommen, ist kein Objekt der Person-Klasse, sondern ein Optional.
Das Folgende ist der Code für die persönliche Praxis

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的值为空");
		}
	}
Nach dem Login kopieren

[Verwandte Empfehlungen]

1. Verwendung von Optional, einer neuen API in Java 8 Beispiel2.

Parsing Java 8 Optionales Klassenbeispiel-Tutorial

Das obige ist der detaillierte Inhalt vonTeilen Sie den Beispielcode der neu eingeführten Klasse Optional in Java8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Apr 26, 2023 am 09:22 AM

Java8 berechnet das Datum vor einem Jahr oder ein Jahr später mithilfe der minus()-Methode, um das Datum vor einem Jahr zu berechnen packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDate previousYear=today.minus(1,ChronoUni

Wie berechnet man das Datum eine Woche später mit Java 8? Wie berechnet man das Datum eine Woche später mit Java 8? Apr 21, 2023 pm 11:01 PM

So berechnen Sie das Datum eine Woche später in Java8. In diesem Beispiel wird das Datum eine Woche später berechnet. Das LocalDate-Datum enthält keine Zeitinformationen. Seine plus()-Methode wird zum Hinzufügen von Tagen, Wochen und Monaten verwendet. Die ChronoUnit-Klasse deklariert diese Zeiteinheiten. Da LocalDate ebenfalls ein unveränderlicher Typ ist, müssen Sie Variablen verwenden, um nach der Rückgabe Werte zuzuweisen. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Was sind die häufig verwendeten optionalen Methoden in Java? Was sind die häufig verwendeten optionalen Methoden in Java? May 09, 2023 am 11:34 AM

Vorwort Optional ist in Java ein Containerobjekt, das einen Wert ungleich Null enthalten oder leer sein kann. Sein Hauptzweck besteht darin, Nullzeigerausnahmen beim Schreiben von Code zu vermeiden. Die vollständige Verwendung von Optional in Java8 ist wie folgt: 1. Erstellen Sie ein optionales Objekt. Sie können ein optionales Objekt mit einem Nicht-Null-Wert über die of()-Methode erstellen, zum Beispiel: Optionaloptional=Optional.of("value"). ; Es kann auch über die ofNullable()-Methode erstellt werden. Ein optionales Objekt, das möglicherweise einen Nullwert enthält, zum Beispiel: Optionaloptional=Optiona

Umgang mit Nullwertfällen mithilfe der optionalen Funktion in Java Umgang mit Nullwertfällen mithilfe der optionalen Funktion in Java Oct 20, 2023 am 10:06 AM

So verwenden Sie die optionale Funktion zur Verarbeitung von Nullwerten in Java. Bei der Java-Programmierung stoßen wir häufig auf Situationen, in denen Nullwerte verarbeitet werden. Um diese Situation zu vermeiden, hat Java8 die optionale Klasse zur Behandlung von Nullwertsituationen eingeführt. Die optionale Klasse ist eine Containerklasse, die einen nicht leeren Wert oder keinen Wert enthalten kann. Mithilfe der optionalen Klasse können wir Nullwertsituationen eleganter behandeln und Nullzeigerausnahmen vermeiden. unter

So verwenden Sie die Clock-Klasse in Java8 So verwenden Sie die Clock-Klasse in Java8 Apr 25, 2023 pm 03:37 PM

Die Clock-Klasse von Java8 Java8 fügt eine Clock-Klasse zum Abrufen des aktuellen Zeitstempels oder von Datums- und Uhrzeitinformationen in der aktuellen Zeitzone hinzu. Wo zuvor System.currentTimeInMillis() und TimeZone.getDefault() verwendet wurden, können sie durch Clock ersetzt werden. packagecom.shxt.demo02;importjava.time.Clock;publicclassDemo10{publicstaticvoidmain(String[]args){//Gibt die aktuelle Zeitbasis zurück

So erhalten Sie den aktuellen Zeitstempel in Java8 So erhalten Sie den aktuellen Zeitstempel in Java8 May 01, 2023 am 11:46 AM

Rufen Sie den aktuellen Zeitstempel in Java8 ab. Die Instant-Klasse verfügt über eine statische Factory-Methode now(), die den aktuellen Zeitstempel zurückgibt, wie unten gezeigt: packagecom.shxt.demo02;importjava.time.Instant;publicclassDemo16{publicstaticvoidmain(String[]args) {Instanttimestamp=Instant.now();System.out.println("Whatisvalueofthisinstant"+timestamp.t

So verwenden Sie vordefinierte Formatierungstools zum Analysieren oder Formatieren von Datumsangaben in Java8 So verwenden Sie vordefinierte Formatierungstools zum Analysieren oder Formatieren von Datumsangaben in Java8 Apr 28, 2023 pm 07:40 PM

So verwenden Sie vordefinierte Formatierungstools in Java8, um Datumsangaben zu analysieren oder zu formatieren packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassDemo17{publicstaticvoidmain(String[]args){StringdayAfterTommorrow="20180205 ";LocalDateformatted =LocalDate.parse

So ermitteln Sie, ob zwei Datumsangaben in Java8 gleich sind So ermitteln Sie, ob zwei Datumsangaben in Java8 gleich sind May 02, 2023 am 08:46 AM

Bestimmen Sie, ob zwei Datumsangaben in Java8 gleich sind 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("Times are equal");}e

See all articles