- 浏览: 62287 次
- 性别:
- 来自: 成都
文章分类
最新评论
//该类是jdk1.8新增的类,主要是为了解决NPE问题。 //先看构造函数: private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); } //可以看到构造函数都是私有的。所以可以推测创建该对象的方法应该是静态的。 //来看创建对象的方法:(都是静态方法) //结合上面的构造方法可以看到如果传入的value为null,会抛出NPE. public static <T> Optional<T> of(T value) { return new Optional<>(value); } //可以传入NULL public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); } //再看其他方法: //返回空对象 public static<T> Optional<T> empty() { @SuppressWarnings("unchecked") Optional<T> t = (Optional<T>) EMPTY; return t; } //获取对象。如果未null会抛NPE. public T get() { if (value == null) { throw new NoSuchElementException("No value present"); } return value; } //是否有value public boolean isPresent() { return value != null; } //如果有值,就消费该值 public void ifPresent(Consumer<? super T> consumer) { if (value != null) consumer.accept(value); } //符合当前断言则返回负责返回empty public Optional<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate); if (!isPresent()) return this; else return predicate.test(value) ? this : empty(); } //通过Function转换当前对象 public<U> Optional<U> map(Function<? super T, ? extends U> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) return empty(); else { return Optional.ofNullable(mapper.apply(value)); } } //平行转换 和map的区别在于这里不会用optional封装,而是直接返回optional。 public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) return empty(); else { return Objects.requireNonNull(mapper.apply(value)); } } public T orElse(T other) { return value != null ? value : other; } //如果是null,则从Supplier函数中get public T orElseGet(Supplier<? extends T> other) { return value != null ? value : other.get(); } //如果为空抛出异常 public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X { if (value != null) { return value; } else { throw exceptionSupplier.get(); } }
发表评论
-
读Objects源码
2018-06-17 14:02 328//该类是一个工具类,主要封装了对对象的equals,hash ... -
读AbstractStringBuilder源码
2017-10-16 16:56 346//该类是StringBuilder和StringBuff ... -
读String源码
2017-10-16 15:17 461//先看构造函数 public String() { ... -
java编译编码问题
2017-10-02 11:35 355最近由一个编码问题。让我对另一个编码问题产生了疑惑。 即我们在 ... -
在java服务端设置允许跨域请求
2017-08-29 10:58 2619//写一个filter对response进行过滤 pub ... -
java从数据库中查出来二次封装基于注解
2018-03-05 22:33 530实现类似于mybatis一对多关系和一对一关系: 上代码: ... -
java从数据库中查出来二次封装基于XML
2018-03-05 22:22 315实现类似于mybatis的配置关系一对多或者一对一的实现:基于 ... -
对abstract关键字的另一番理解
2017-03-22 16:10 260直接上代码: public abstract class An ... -
JVM垃圾回收历史
2017-02-17 16:30 319从网上看到一篇文章讲述垃圾回收的历史搬运过来: 为什么要有G ... -
看String源码的疑惑
2016-10-21 15:27 416今天看JDK String 源码有一段代码实在没想通,网上也没 ... -
java final关键字
2016-10-09 22:03 328final关键字的主要用于申明这个东西是不可变的。用于设计以及 ... -
java for each循环的原理
2016-10-09 21:18 453这篇介绍java for each原理的文章写的很棒,转过来m ... -
关于java内部类
2016-10-09 21:10 269关于java内部类,这篇文章写的非常好。尊重作者的劳动成果: ... -
java static关键字的作用
2016-10-05 17:23 257static关键字的设计初衷,套用thinking in ja ... -
关于反射泛型的封装
2016-09-11 16:16 429最近用到了jackson转json。看了下TypeRefere ... -
java到底是按照值传递还是引用传递
2016-07-25 19:45 392public class Transfer { pub ...
相关推荐
源码包含“sun”这一关键信息,意味着我们将讨论Java 8中与“sun”包相关的内容。"sun"包在Java中是一个内部使用的包,包含了Java平台的核心实现,通常不建议开发者直接使用。然而,了解这个包可以帮助我们深入理解...
4. **Optional 类**:`java.util.Optional` 是一个容器对象,可能包含或不包含非null值。它的设计目的是减少空指针异常,并强制程序员明确处理缺失值,提高代码的健壮性。 5. **方法引用和构造器引用**:在 Lambda ...
`java.util.Optional`是Java 8引入的一个容器类,用于表示可能为null的值。通过使用Optional,可以避免空指针异常,使代码更清晰,更健壮。 6. **默认方法(default methods)** 在接口中添加默认方法是Java 8的...
这份"Java 8 源码"包含了完整的Java 8官方开放源代码,是Java开发者深入理解语言内部机制、提升编程技能的重要资源。通过阅读源码,开发者可以更好地掌握新特性,如Lambda表达式、Stream API、日期与时间API以及函数...
8. **Optional类**:为了解决空指针异常问题,JDK 1.8引入了`Optional`类,源码可以揭示它是如何帮助开发者避免`NullPointerException`的。 9. **日期时间API**:JDK 1.8改进了日期和时间的处理,`java.time`包下的...
10. **Java高级特性**:如Lambda表达式、Stream API、Optional类等Java 8及以后版本引入的新特性,这些都能在源码中找到实际应用。 通过深入研究这份“java之经典源码大全”,开发者不仅可以巩固基础,还能提升对...
Java 1.8 源码是学习Java编程语言核心机制和高级特性的宝贵资源,它揭示了Java平台内部的工作原理。在这个版本中,Java引入了许多重要的改进和新特性,如Lambda表达式、Stream API、默认方法以及对并发处理的优化。...
《深入解析Core Java 8源码》 Java作为世界上最受欢迎的编程语言之一,其核心库——Core Java,一直是开发者学习和研究的重要对象。本资料集合了Core Java 8的源码,旨在帮助开发者深入理解Java语言的基础和高级...
最后,`最新java练习题`和`最新java面试题`则是针对当前Java技术趋势的练习和面试题目,可能涉及到Java 8及以上版本的新特性,如Lambda表达式、Stream API、Optional类、并发改进等。了解并熟练应用这些新特性,可以...
Java自学资源源码是针对那些想要通过自我学习掌握Java编程语言的人们提供的宝贵资料。这份压缩包文件包含的"java book"很可能是一个或多个Java教程的电子书或者代码示例集合,旨在帮助初学者理解Java的基本概念、...
通过分析MySQL Connector/J的源码,开发者可以更好地理解JDBC的工作机制,学习数据库驱动的实现,这对于开发高效、健壮的Java数据库应用非常有帮助。同时,这也是提升数据库性能、排查问题和定制化需求的重要途径。
"Java基础知识源码分享"提供了一系列的学习资源,旨在帮助初学者和开发者深入理解Java的核心概念。这个压缩包中的"learn"目录很可能是包含了多个子文件夹,每个子文件夹可能对应一个Java基础概念或技术。 1. **Java...
6. **Optional类**:为了解决null安全问题,Java 8引入了`Optional`类。它是一个容器类,代表一个值存在或不存在。这有助于避免空指针异常,提高代码的可读性和健壮性。 7. **接口的私有方法和静态方法**:Java 8...
5. **Optional 类**:`java.util.Optional`是一个容器对象,可能包含或不包含非null值。设计这个类是为了减少空指针异常,并强制程序员显式地处理缺失值,提高了代码的健壮性。 6. **日期和时间 API 的改进**:Java...
【Java学习笔记(源码)】是一份详细记录了Java编程语言学习过程的资源集合,包含实际的源代码示例。这份笔记旨在帮助初学者和有一定经验的开发者深入理解和掌握Java语言的核心概念、语法以及常见应用。以下是笔记中...
**Java Development Kit (JDK) 源码详解** JDK,即Java Development Kit,是Java编程语言的核心组件,包含了编译器、运行时环境、工具集和其他必要的资源,用于开发和运行Java应用程序。这里提到的"jdk源码(完整版...
Java源码的学习是每个Java开发者深入理解这门语言精髓的重要步骤。Java 1.8,也被称为Java 8,是Java发展历程中的一个里程碑版本,引入了许多创新特性,这些特性极大地提升了开发效率和代码质量。在这个压缩包文件...
通过本书的源码,读者可以深入理解以上特性在实际代码中的应用,体验Java 8带来的编程效率提升。学习时,应结合具体代码实例,动手实践,以达到最佳学习效果。此外,理解这些新特性的背后设计理念,对于成为一名优秀...
Java 8还引入了Optional类,用于表示可能为空的对象值。Optional类帮助避免空指针异常,鼓励开发者显式处理缺失值,提高了代码的健壮性。例如,`Optional<String> optional = Optional.ofNullable(getValue()); ...
在描述中提到“我运行了一下,这个没错,可以用,运用了java的最新方法”,这暗示了该系统采用了现代Java技术栈,可能包括但不限于Java 8或更高版本的新特性,如Lambda表达式、Stream API、Optional类等,以及可能...