在Java中,null代表一个不存在的对象,如果对它进行操作就会抛出java.lang.NullPointerException异常。
NPE(NullPointerException)是调试程序最常见的异常。google一下有很多关于方法到底应该返回null还是new一个空对象的讨论。
类似于scala的scala.Option[T]、Haskell的Data.Maybe,Java 8 引入了java.util.Optional<T>。Opitonal就是一个元素的容器,Java8新添加的很多类或者方法的返回值都使用了Opitonal。Java5的话可以使用
Google Guava的Optional来实现,Java8的Optional的接口跟Guava的Optional很相似。
// 创建Optional
String mayBeNull = null;
Optional<String> opt1 = Optional.of(" Hello, rensanning! ");
Optional<String> opt2 = Optional.ofNullable(mayBeNull);
Optional<String> opt3 = Optional.empty();
// ifPresent
opt1.ifPresent(System.out::println); // " Hello, rensanning! "
opt2.ifPresent(System.out::println);
opt3.ifPresent(System.out::println);
// isPresent
boolean b1 = opt1.isPresent();
boolean b2 = opt2.isPresent();
boolean b3 = opt3.isPresent();
System.out.println(b1 + "\t" + b2 + "\t" + b3); // true false false
// filter
opt1.filter(x -> x.contains("ren"))
.ifPresent(System.out::println); // " Hello, rensanning! "
opt2.filter(x -> x.contains("ren"))
.ifPresent(System.out::println);
opt3.filter(x -> x.contains("ren"))
.ifPresent(System.out::println);
// map
opt1.map(String::trim)
.ifPresent(System.out::println); // "Hello, rensanning!"
// flatMap
Optional<String> lastName = Optional.of("last");
Optional<String> firstName = Optional.of("first");
Optional<String> fullName =
lastName.flatMap(ln -> firstName.map(fn -> String.join(" ", ln, fn)));
System.out.println(fullName.get()); // "last first"
Optional<Integer> len = opt1.map(String::length);
// get
System.out.println(len.get()); // 20
try {
System.out.println(opt2.get());
} catch (Exception e) {
// java.util.NoSuchElementException
e.printStackTrace();
}
// orElse/orElseGet/orElseThrow
int len1 = opt1.map(String::length).orElse(-1);
int len2 = opt2.map(String::length).orElse(-1);
int len3 = opt3.map(String::length).orElseGet(() -> 5*40);
System.out.println(len1 + "\t" + len2 + "\t" + len3); // 20 -1 200
try {
opt3.filter(s -> !s.isEmpty())
.map(s -> s.charAt(0))
.orElseThrow(IllegalArgumentException::new);
} catch (Exception e) {
// java.lang.IllegalArgumentException
e.printStackTrace();
}
// Optional -> List
List<String> list1 = opt1.map(Collections::singletonList)
.orElse(Collections.emptyList());
System.out.println(list1.get(0));// " Hello, rensanning! "
// OptionalInt/OptionalLong/OptionalDouble
OptionalInt optionalInt = OptionalInt.of(90);
System.out.println(optionalInt.getAsInt()); // 90
OptionalLong optionalLong = OptionalLong.of(999_999_999_999_999_999L);
System.out.println(optionalLong.getAsLong()); // 999999999999999999
OptionalDouble optionalDouble = OptionalDouble.of(56.000009);
System.out.println(optionalDouble.getAsDouble()); // 56.000009
参考:
http://www.importnew.com/6675.html
http://blog.informatech.cr/2013/04/10/java-optional-objects/
分享到:
相关推荐
Java 8 新特性之 Lambda 表达式和 Optional 类 Java 8 是 Java 语言的最新版本之一,它引入了许多新的特性,包括 Lambda 表达式和 Optional 类,这些特性极大地提高了 Java 语言的编程效率和可读性。下面我们将详细...
总的来说,Java 8的Optional类提供了一种新的思考方式来处理可能为null的对象,它鼓励程序员更积极地处理潜在的null值,以减少编程错误。然而,使用Optional时应适度,结合具体场景选择合适的方法,以达到最佳的代码...
7. **Optional类**:为了解决null对象问题,Java 8引入了`Optional`类,它是一个可以为null的容器对象。通过使用`Optional`,可以更好地表达代码中的缺失值,并避免空指针异常。 8. **平行流(Parallel Streams)**:...
Java 判空 Optional 详解
JAVA Optional类用法分享 JAVA中的Optional类是一个容器类,它可能包含一个非空值或不包含任何值。Optional类提供了一种安全的方式来处理可能为null的对象,避免了空指针异常。 Optional类结构 Optional类中包含...
总的来说,"java8中文api"这个文档涵盖了Java 8的所有新特性和重要API,包括Lambda表达式、Stream API、函数式接口、日期和时间API、Optional类以及并发改进等。无论你是初学者还是有经验的开发者,这个文档都将是你...
8. **Optional类**:为了解决null安全问题,Java8引入了`Optional`类。它是一个容器对象,可以保存一个值,也可能没有值。这有助于避免空指针异常。 以上就是Java8安装和主要特性的详细说明。理解并掌握这些内容,...
Java 8引入了`Optional`类来解决null值带来的问题。`Optional<T>`代表一个值存在或不存在,避免了空指针异常。例如,`Optional<String> optional = Optional.ofNullable(getValue());`,然后可以使用`optional.if...
4. **日期和时间API**:Java 8彻底改革了日期和时间处理,引入了`java.time`包,包含`LocalDate`、`LocalTime`、`LocalDateTime`等类,取代了原来的`java.util.Date`和`java.util.Calendar`。这些新类提供了更加友好...
Optional 类是 Java 8 的一个容器类,它代表一个值存在或不存在。简单来说,它可以看作是一个可以为null的容器对象。如果值存在则 isPresent() 方法会返回 true,调用 get() 方法会返回该对象。 1. **Optional 的...
此外,Java 8的Optional类是一个容器对象,可能包含或不包含非null值。它用于表示那些可能缺失的结果,避免空指针异常,增强了代码的健壮性。使用`Optional`可以更好地表达方法返回值的可有可无,使得代码更清晰。 ...
Java 8 Optional 是一个强大的工具,它被引入来帮助开发者避免空指针异常(NullPointerException)。这个特性是为了提高代码的清晰性和可读性,通过显式地处理缺失值,使得空值处理更加优雅和安全。本篇文章将深入...
- 为了避免空指针异常,Java 8 引入了 `Optional` 类。`Optional` 代表一个值可能存在也可能不存在,强制开发者显式处理 null 值,提高代码的健壮性。 6. **接口的私有方法和静态方法**: - Java 8 允许在接口中...
Java 8还引入了Optional类,用于表示可能为空的对象值。Optional类帮助避免空指针异常,鼓励开发者显式处理缺失值,提高了代码的健壮性。例如,`Optional<String> optional = Optional.ofNullable(getValue()); ...
7. **Optional类**:为了解决空指针异常问题,Java 8引入了`Optional<T>`类。它是一个容器对象,可能包含或不包含非null值。如果值存在则`isPresent()`返回true,调用`get()`会返回该对象。这有助于编写更清晰的代码...
7. **Optional类**:为了解决null值带来的问题,Java 8引入了`Optional`类,它是一个可以为null的容器对象,有助于减少空指针异常的发生。 配置Java 8 64位免安装版的环境变量主要涉及以下几步: 1. **设置JAVA_...
Lambda表达式是Java 8最显著的特性之一,它允许以简洁的方式定义匿名函数。这种语法使得代码更加简洁,特别是处理函数式编程场景时,如集合的流操作。例如: ```java List<String> names = Arrays.asList("Alice...
4. **Optional类**:为了解决空指针异常(NullPointerException),Java 8引入了Optional类,它提供了一种更安全的方式来封装可能为空的对象,强制开发者显式处理null值。 5. **日期和时间API的改进**:Java 8对...