`
一帆风顺
  • 浏览: 3521 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

处理空指针Optional

 
阅读更多

Optional可以看作是一个存放对象的容器

	@Test
	public void createOptional() {
		//empty() 给Optional中放入一个null对象
		Optional<Object> empty = Optional.empty();
		System.out.println(empty);
		System.out.println("====================");
		//of(T value) 创建了一个Optional对象并且包含一个value的对象,如果value为空,报异常。
		Optional<Employee> of = Optional.of(new Employee());
		System.out.println(of);
		//Optional<Employee> of2 = Optional.of(null);
		//System.out.println(of2);
		System.out.println("====================");
		/*
		 * ofNullable(T value)方法,与of()方法不同的是在向Optional对象中存放对象时先进行判断
		 *   如果value不为null的话,创建一个Optional对象并且包含一个value的对象,
	     *   如果value为null,  创建一个Optional.empty()对象
		 */
		Optional<Employee> ofNullable = Optional.ofNullable(new Employee());
		System.out.println(ofNullable);
		Optional<Employee> ofNullable2 = Optional.ofNullable(null);
		System.out.println(ofNullable2);
	}
	输出:
	Optional.empty
	====================
	Optional[Employee [name=null, salary=null, age=null, hireDay=null]]
	====================
	Optional[Employee [name=null, salary=null, age=null, hireDay=null]]
	Optional.empty


	//T get() 取出Optional中的对象,如果Optional中的对象为null,抛出异常
	@Test
	public void getTest() {
		Optional<Employee> of = Optional.of(new Employee());
		System.out.println(of.get());
		//Optional<Object> empty = Optional.empty();
		//System.out.println(empty.get());
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	*   T orElse(T other) 取出Optional中的对象,设置一个默认对象(默认值),	
	*    如果Optional中的对象为null的时候,就返回默认对象
	*/
	@Test
	public void orElseTest() {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.orElse(new Employee()));
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	*  T orElseGet(Supplier<? extends T> other) 与orElse()方法作用相同,
	*  区别在于参数,orElseGet()方法 使用了函数式接口,设置一个默认对象
	*/
	@Test
	public void orElseGetTest() {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.orElseGet(Employee::new));
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	*  <X extends Throwable> orElseThrow(Supplier<? extends X> exceptionSupplier)方法
	*  设置一个默认的异常对象, 当取出Optional中的对象时,
	*  如果Optional中的对象为null的时候,抛出指定的默认异常
	*/
	@Test
	public void orElseThrowTest() throws Exception {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.orElseThrow(Exception::new));
	}
	输出:
	无输出,Optional中是null对象,报Exception异常。


	// boolean isPresent() 判断Optional是否存在对象,如果存在返回true,否则false
	@Test
	public void isPresentTest() {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.isPresent());
	}
	输出:
	false


	/*
	* void ifPresent(Consumer<? super T> consumer) 判断Optional是否存在对象,
	* 如果存在执行Consumer中的accept()方法
	*/
	@Test
	public void ifPresentTest() {
		Optional<Object> empty = Optional.of(new Employee());
		empty.ifPresent(System.out::println);
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]
	

	/*
	* Optional<T> filter(Predicate<? super T> predicate) 
	* 把Optional中的对象传入Predicate的方法中,返回值为true,就返回包含该对象的Optional,
	* 如果为false,返回Optional.empty();
	*/
	@Test
	public void filterTest() {
		Optional<Object> optional = Optional.of(new Employee());
		Optional<Object> filter = optional.filter((e)->{
			return e !=null;
		});
		System.out.println(filter);
	}
	输出:
	Optional[Employee [name=null, salary=null, age=null, hireDay=null]]


	/*
	* <U> Optional<U> map(Function<? super T, ? extends U> mapper)
	* 把返回的对象放入Optional中
	*/
	@Test
	public void mapTest() {
		Optional<Employee> optional = Optional.of(new Employee());
		Optional<Employee> map = optional.map((x)->{
			return x;
		});
		System.out.println(map.get());
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	* <U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
	* 返回Optional的对象
	*/
	@Test
	public void flatMapTest() {
		Optional<Employee> optional = Optional.of(new Employee());
		Optional<String> flatMap = optional.flatMap((x)->{
			Optional<String> optional2=Optional.of("abc");
			return optional2;
		});
		System.out.println(flatMap);
	}
	输出:
	Optional[abc]

 

分享到:
评论

相关推荐

    使用Optional解决空指针问题共2页.pdf.zip

    这样,`Optional`提供了一种更安全的方式来处理可能为null的对象,避免了空指针异常的发生。 1. **理解Optional的基本用法** - **创建Optional对象**:可以通过`Optional.ofNullable(T value)`或`Optional.empty()...

    J2EE编程(action之空指针)

    5. **使用框架提供的功能**:在Struts2等MVC框架中,提供了内置的功能来帮助处理空指针异常。例如,可以在Action类的execute()方法中利用框架的验证机制来确保所有的请求参数都是有效的。 6. **代码审查**:定期...

    利用Java8 Optional如何避免空指针异常详解

    总结来说,Java 8 的 Optional 提供了一种更优雅的方式来处理可能为 null 的值,它通过强制开发者显式地处理值的存在或缺失,提高了代码的健壮性和可读性,减少了空指针异常的风险。在编写 Java 8 及更高版本的代码...

    java空指针

    3. **异常处理**:虽然应尽量避免空指针异常的发生,但在无法完全避免的情况下,合理使用异常处理机制(如`try-catch`块)可以防止程序崩溃,同时提供错误信息。 4. **代码审查与单元测试**:定期进行代码审查和...

    还在用if(obj!=null)做非空判断,带你快速上手Optional

    * 避免空指针异常:Optional 可以明确地处理可能为空的对象,从而避免空指针异常的出现。 * 代码简洁性:Optional 可以使代码更加简洁,减少了if-else 语句的使用。 * 可读性强:Optional 可以提高代码的可读性,...

    Java函数式开发 Optional空指针处理

    在Java编程中,`Optional` 类自 Java 8 引入,旨在解决长期以来困扰开发者们的空指针异常(`NullPointerException`)问题。`Optional` 是一个容器类,代表一个值存在或不存在。它提供了一种更安全的方式来处理可能为...

    空指针异常

    "username"); // 该变量值为空时,不执行任何操作,直接...此外,良好的编程习惯、合理的异常处理以及利用 Java 8 中的 Optional 类型都是防止空指针异常的有效策略。通过这些方法,可以显著提高代码的健壮性和可靠性。

    JDK1.8 Optional 笔记.pdf

    Java是一种广泛使用的面向对象编程语言,它在处理空指针异常方面一直存在挑战。在Java 8版本中,引入了Optional类,以帮助开发者更简洁和安全地处理可能为空的值。 Optional类位于java.util包中,它不是基本类型,...

    J2EE编程(action之空指针处理)

    当我们遇到“action之空指针处理”这样的问题时,通常是因为在数据传递过程中没有正确地初始化对象或者引用了未赋值的对象。下面我们将详细探讨这个问题以及如何避免和解决它。 首先,让我们看看在名片管理系统这样...

    Java8新特性之空指针异常的克星Optional类的实现

    因此,使用 `Optional` 类的开发者必须显式处理值不存在的情况,而不是依赖于未检查的空指针异常。 创建 `Optional` 对象有三种方式: 1. `empty()`:用于创建一个没有值的 `Optional` 实例,通常用于默认值或者...

    java 空指针异常(NullPointerException)

    - **使用Optional**:Java 8引入的`Optional&lt;T&gt;`可以帮助避免空指针异常,它提供了一种更安全的方式来封装可能为null的值。 - **避免返回null**:设计方法时尽量避免返回null,而应返回一个默认值或抛出异常。 ### ...

    Optional 使用方法详解

    `Optional`的API设计旨在避免空指针异常,提供了一套优雅的方式来处理可能不存在的值。 1. 创建`Optional`对象 创建`Optional`对象通常通过`Optional.ofNullable(T value)`或`Optional.empty()`方法。前者接受一个...

    关于Java8新特性Optional类的详细解读.rar

    其中,Optional类是解决空指针异常(NullPointerException)问题的一种创新尝试。Optional类的设计理念是鼓励开发者显式地处理null值,从而减少由于隐式null检查导致的编程错误。 **Optional类的基本概念** ...

    Java8Optional机制的正确使用方式共6页.pdf

    Java 8 Optional 是一个强大的工具,它被引入来帮助开发者避免空指针异常(NullPointerException)。这个特性是为了提高代码的清晰性和可读性,通过显式地处理缺失值,使得空值处理更加优雅和安全。本篇文章将深入...

    Java8Optional机制的正确使用方式共6页.pdf.zip

    Java 8 Optional 是一个强大的工具,它被引入来解决经典的空指针异常(NullPointerException)问题,从而提升代码的可读性和安全性。Optional 类是 Java 8 的一个容器类,它代表一个值存在或不存在。简单来说,它...

    java.lang.NullPointerException的可能原因及处理.docx

    3. 使用 Optional 类:使用 Optional 类可以避免空指针异常的出现。Optional 类提供了一个安全的方式来访问对象的方法。 4. 捕获异常:使用 try-catch 语句捕获 NullPointerException,并采取相应的措施以避免异常...

    JAVA Optional类用法分享

    Optional类提供了一种安全的方式来处理可能为null的对象,避免了空指针异常。 Optional类结构 Optional类中包含两个属性:EMPTY和value。EMPTY属性用来存放一个value为null的Optional对象,而value属性用来存放非...

    java8新特性Optional深度解析.docx

    它鼓励程序员采用更清晰的方式来处理可能为 `null` 的值,避免了在代码中常见的空指针异常。 `Optional` 类本身是泛型的,可以存储任何类型的对象。同时,针对常用的基本数据类型如 `double`, `int`, `long`,Java ...

Global site tag (gtag.js) - Google Analytics