- 浏览: 58317 次
- 性别:
- 来自: 成都
文章分类
最新评论
//该类是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 306//该类是一个工具类,主要封装了对对象的equals,hash ... -
读AbstractStringBuilder源码
2017-10-16 16:56 321//该类是StringBuilder和StringBuff ... -
读String源码
2017-10-16 15:17 434//先看构造函数 public String() { ... -
java编译编码问题
2017-10-02 11:35 329最近由一个编码问题。让我对另一个编码问题产生了疑惑。 即我们在 ... -
在java服务端设置允许跨域请求
2017-08-29 10:58 2576//写一个filter对response进行过滤 pub ... -
java从数据库中查出来二次封装基于注解
2018-03-05 22:33 500实现类似于mybatis一对多关系和一对一关系: 上代码: ... -
java从数据库中查出来二次封装基于XML
2018-03-05 22:22 289实现类似于mybatis的配置关系一对多或者一对一的实现:基于 ... -
对abstract关键字的另一番理解
2017-03-22 16:10 235直接上代码: public abstract class An ... -
JVM垃圾回收历史
2017-02-17 16:30 285从网上看到一篇文章讲述垃圾回收的历史搬运过来: 为什么要有G ... -
看String源码的疑惑
2016-10-21 15:27 387今天看JDK String 源码有一段代码实在没想通,网上也没 ... -
java final关键字
2016-10-09 22:03 299final关键字的主要用于申明这个东西是不可变的。用于设计以及 ... -
java for each循环的原理
2016-10-09 21:18 421这篇介绍java for each原理的文章写的很棒,转过来m ... -
关于java内部类
2016-10-09 21:10 246关于java内部类,这篇文章写的非常好。尊重作者的劳动成果: ... -
java static关键字的作用
2016-10-05 17:23 223static关键字的设计初衷,套用thinking in ja ... -
关于反射泛型的封装
2016-09-11 16:16 390最近用到了jackson转json。看了下TypeRefere ... -
java到底是按照值传递还是引用传递
2016-07-25 19:45 359public class Transfer { pub ...
相关推荐
Java 判空 Optional 详解
源码 Java8-Learning JAVA8新特性 Optionals: Optional不是函数式接口,而是用于防止NullPointEXception的漂亮工具。Optional是一个简单的容器,其值可能是null或者不是null。在Java8之前一般某个函数应该返回非空...
00.尚硅谷_Java11_笔记、源码 01.尚硅谷_Java11_简介 02.尚硅谷_Java11_官方更新列表 03.尚硅谷_Java11_Shell 04.尚硅谷_Java11_集合中的新API1 05.尚硅谷_Java11_局部变量类型推断 06.尚硅谷_Java11_集合中的新API2...
在J2ME中还有一个重要的概念是可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(Bluetooth API)提供了对蓝牙的支持。 目前,J2ME中有两个最主要...
java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...
java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...
源码 java8 java8 note and code example java8新特性 Stream Api Lambda 表达式 行为参数化 接口中的默认方法 Date Time Api Optional 类 Stream 和 Collection的区别 Stream 描述对数据的计算 Collection 存储和...
这个项目是我阅读了《java8实战》这本书,根据书籍提供的源码做了一些修改注释,用于以后查阅复习使用 lambda表达式 basics 流的构建与遍历 筛选与切片 映射 查找和匹配 归约 排序 示例/应用 collector(用流收集数据)...
java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在此处购买抢先体验: 我们非常渴望听到您的反馈并根据您的评论改进本书! 所有示例的源...
重叠的功能,类似Java8有Collections,Arrays,Optional,StringUtils,Stream,Consumer等。所以在Java中没有所需要的 工具类封装时参考Guava的相关实现是一个不错的选择。学习心得如下: 1.字符串集合转换相关(Joiner,...
java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...
源码 Java8 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。 Java8 新增了...
java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...
java8流源码java8 Java 8 —— 函数式编程 介绍 该存储库包含例如 Java 8 In Action 和 Java 8 Lambdas Pragmatic Functional Programming 一书中的源代码。 同时自己也做了一些扩展使用,修复了源码中的bug。 例如 ...
java8 lambda 函数式接口 Stream流 并行流 Optional 方法引用
仿知乎java源码JAVA SOCKS 代理的中间人 SOCKS 代理协议的拦截器,允许用户转储任何连接的内容,即使它是用 SSL 保护的。 请注意,这不是通用代理服务器(性能问题和缺乏功能)。 我实际上是为了我检查移动应用程序...
尚硅谷_Java8新特性_源码、课件 ·01. 尚硅谷_Java8新特性_简介 ·02. 尚硅谷_Java8新特性_为什么使用 Lambda 表达式 ·03. 尚硅谷_Java8新特性_Lambda 基础语法 ·04. 尚硅谷_Java8新特性_Lambda 练习 ·05. ...
看不到源码 复古-可选 Java7 的 Java8 monad 选项的向后移植。 示例:假设我们有一个类A的实例,它可以为空,并且我们对获取嵌套函数调用链的结果感兴趣,最终将产生一个boolean 。 每个中间步骤都可能失败并返回...
java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...