使用Optional摆脱NPE的折磨】的更多相关文章

在目前的工作中,我对Java中的Stream和Lambda表达式都使用得很多,之前也写了两篇文章来总结对应的知识. 024:Java流实现Shell:cat 1.log | grep a | sort | uniq -c | sort -rn 函数式编程让你忘记设计模式 不过对于Optional这个特性,一直没有很好地使用起来,所以最近又开始阅读<Java 8实战>这本书,本文是针对其中第10章的一个学习总结. 背景 在Java中,如果你尝试对null做函数调用,就会引发NullPointer…
引言 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示 在这种情况下,有如下代码 user.getAddress().getProvince(); 这种写法,在user为null时,是有可能报NullPointerException异常的.为了解决这个问题,于是采用下面的写法 if(user!=null){ Address address = user.getAddress(); if(a…
本文阅读时间大约7分钟. 今天我们谈谈SOFA模块化,首先看一段SOFA的介绍: SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力.在增强了Spring Boot的同时,SOFABoot提供了让用户可以在Spring Boot中非常方便地使用SOFA中间件的能力. 在接触SOFA的模块化概念之前,我对服务端开发的模块化认知停留在"模块化"这个层面,我通常会按照…
本文阅读时间大约6分钟. 其实写这篇文章,也是来自一个知识星球读者的提问,他在二面的过程中被问到了,由于他简历中写道有 MySQL 调优经验,但这个问题没有回答好,二面被刷了. 其实我们刚学习 C 语言的时候,就接触过 NULL,比如下面这句代码. int *p = NULL; 它实际上表示将指针指向一块不被使用的内存地址,一般会在宏中定义好. 那么我们常用的 Java 语言,同样也用到 null,表示一个空引用,如果你不小心引用了,那么就会抛出 NullPointerException,就像昨…
说明 IDEA里有一个万能快捷键(alt enter),功能非常强大,同一个快捷键,可以根据不同的语境提示你不同的操作,很多人可能还不了解这些功能,在处理代码的时候还手动处理,了解这些技巧之后,你编码也是一种享受. 万能快捷键可以帮你做很多事情,我大概总结了17点: 转换lambda表达式 equals的翻转 自动导包 异常捕获 SimpleDateFormat转换为ThreadLocal封装的SimpleDateFormat 注释移动 便捷的json字符串处理 转化为高效运算的二进制 if--…
前面写过了Stream和Lambda,最近正想写Java 8的Time Api,小胖哥这个文章写得很好,就偷懒转载了. 1.概述 Java 8为Date和Time引入了新的API,以解决旧java.util.Date和java.util.Calendar的缺点. 作为本文的一部分,让我们从现有Date和Calendar API存在的一些问题入手,来探讨新的Java 8 Date和Time API如何解决这些问题. 我们还将搞一搞Java 8时间类库中的核心类,比如LocalDate, Local…
初识 A container object which may or may not contain a non-null value. 笔者理解,Optional是一个容器类.将Object放到Optional中,从而可以使用容器的一些特性,比如链式编程(Stream)等. 具体应用起来,可以分为两步: 放入容器 使用容器 放入容器 有两个方法可以使用,第一个of,不检查传入value是否为null,可能会报NPE. 第二个ofNullable会检查,如果value为null,就返回一个emp…
1: 概论 Optional 是Java8用来改变java引发NPE的解决办法,但是不是绝对的解决办法 2: 例子: 很多博文一上来就给力以下使用例子 @Data public class User { private String name; private Integer age; private Optional<Address> address = Optional.empty(); } @Data public class Address { private Optional<…
快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年java 5发布以来的java世界中最大的事件了.它带来了java语言层面上的诸多改变,主要包括下面一些方面:语法.编译器.库.工具和运行时. 一,语法层面: 1,Lambda表达式. lambda表达式是一种可调用对象,它允许我们将函数作为函数参数传入.诸如C++.Groovy.Scala都已经支持la…
Lambda 之 Collection Stream Collection.stream() 测试实体类 class Demo { private Long id; private String name; // Getters and Setters } // 实例化并组成一个List List<Demo> demos = Lists.newArrayList(new Demo(1L, "SF"), new Demo(2L, "AXE")); 1.ma…
JAVA 8 新特性实用总结 作为一个工作两年多的 老 程序猿,虽然一开始就使用 jdk1.8 作为学习和使用的版本,随着技术的迭代,现有的 JDK 版本从两年前到现在,已经飞速发展到了 JDK 15 .真的感觉有点学不动了,更新速度太快了,不过相比于现有系统以及国内趋势.大多公司还是采用最基础的 1.8 作为线上环境来使用.也是没有任何问题的,不过我们真的 会使用 JAVA8 吗? https://www.oracle.com/java/technologies/java-se-glance.…
本篇文章将详细介绍 Optional 类,以及如何用它消除代码中的 null 检查.在开始之前首先来看下什么是 NPE,以及在 Java 8 之前是如何处理 NPE 问题的. 空指针异常(NullPointException,简称 NPE)可以说是所有 Java 程序员都遇到过的一个异常,虽然 Java 从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而 Java 设计者也只能是让指针在 Java 语言中变得更加简单易用,而不能完全剔除,所以才有了常见对的关键字 null. 避…
避之不及的 NullPointerException NPE : NullPointerException 空指针异常是最常见的Java异常之一,抛出NPE错误不是用户操作的错误,而是开发人员的错误,应该被避免,那么只能在每个方法中加入非空检查,阅读性和维护性都比较差. 以下是一个常见的嵌套对象:一个用户所拥有的汽车,以及为这个汽车配备的保险. public class User { private String userName; private Car car; public String…
前言 在 Java 语言开发中,可能大多数程序员遇到最多的异常就是 NullPointException 空指针异常了.这个当初语言的开发者"仅仅因为这样实现起来更容易"而允许空引用所带来的代价是非常惨痛的.而我们开发者不得不使用多重 if 嵌套判断来规避 NPE 或者通过多个 if 结合 return 语句来终止程序.且看一个例子 假如需要处理下面的嵌套对象,这是一个用于汽车.汽车保险的客户. public class Person { private Car car; public…
转自:map和flatmap的区别 对于stream,   两者的输入都是stream的每一个元素,map的输出对应一个元素,必然是一个元素(null也是要返回),flatmap是0或者多个元素(为null的时候其实就是0个元素). flatmap的意义在于,一般的java方法都是返回一个结果,但是对于结果数量不确定的时候,用map这种java方法的方式,是不太灵活的,所以引入了flatmap. 对于Optional的map和flatmap: map是把结果自动封装成一个Optional,但是f…
从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java 程序员都非常了解的异常. 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空. Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现.但是 Optional 的意义显然不止于此. 我们从一个简单的用例开始.在 Java 8 之前,任何访问对…
前言 只有光头才能变强 前两天带女朋友去图书馆了,随手就给她来了一本<与孩子一起学编程>的书,于是今天就给女朋友讲解一下什么是Optional类. 至于她能不能看懂,那肯定是看不懂的.(学到变量/for循环的女人怎么能看懂呢) 不知道大家还记得上一篇<阿里巴巴 Java开发手册>读后感不,当时阅读到空指针异常(NPE)时,书上提到JDK 8有个Optional类供我们使用,该类可以尽可能地防止出现空指针异常(NPE). 文本力求简单讲清每个知识点,希望大家看完能有所收获 一.基础铺…
写在前头 今天再看阿里的Java开发手册,里面异常处理第10条提到这样一个建议. [推荐]防止 NPE ,是程序员的基本修养,注意 NPE 产生的场景:1 ) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE.反例: public int f() { return Integer 对象}, 如果为 null ,自动解箱抛 NPE .2 ) 数据库的查询结果可能为 null .3 ) 集合里的元素即使 isNotEmpty ,取出的数据元素也可能为 null…
从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常. 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空. Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现.但是 Optional 的意义显然不止于此.   我们从一个简单的用例开始.在 Java 8 之前,任何访…
从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常. 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空. Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现.但是 Optional 的意义显然不止于此.   我们从一个简单的用例开始.在 Java 8 之前,任何访…
参考: https://www.cnblogs.com/xingzc/p/5778090.html http://www.runoob.com/java/java8-optional-class.html empty static <T> Optional<T> empty() 返回空的 Optional 实例. equals boolean equals(Object obj) 判断其他对象是否等于 Optional. filter Optional<T> filte…
Java 8中的Optional<T> 是一个可以包含或不可以包含非空值的容器对象,在 Stream API中很多地方也都使用到了Optional. java中非常讨厌的一点就是nullpoint,碰到空指针就会出错抛Exception,然后需要逐行检查是哪个对象为空,带来大量的不必要精力损耗,抛出NPE错误不是用户操作的错误,而是开发人员的错误,应该被避免,那么只能在每个方法中加入非空检查,阅读性和维护性都比较差. 如下面这个代码的手工非空检查: public void addAddress…
Optional 类是一个可以作为null容器的对象,若值存在调用isPresent()就返回 true,调用get()会返回该对象. Optional是一个容器,可以保存类型T的值,或者仅仅保存null.Optional提供很多有用的方法,我们可以不用那么拙劣的检测空值. 使用Option可以很好解决的NPE 类声明 public final class Optional<T> extends Object() 类方法 I.of 返回一个指定非null的Optional值 //调用工厂创建O…
从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常. 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空. Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现.但是 Optional 的意义显然不止于此. 我们从一个简单的用例开始.在 Java 8 之前,任何访问对象方法或属性…
前言 Java中空指针异常(NPE)一直是令开发者头疼的问题.Java 8引入了一个新的Optional类,使用该类可以尽可能地防止出现空指针异常. Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象.Optional提供很多有用的方法,这样开发者就不必显式进行空值检测. 本文将介绍Optional类包含的方法,并通过示例详细展示其用法. 一.基础知识 1.1 Optional类方法 本节基于作者的实践,给出O…
从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常. 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空. Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现.但是 Optional 的意义显然不止于此.   我们从一个简单的用例开始.在 Java 8 之前,任何访…
传统的线性降维方法,如主成分分析(PCA).因子分析(FA)等,关注的是样本的方差,能学习线性流形的结构,却无法学习非线性流形.而经典的流形学习方法虽然能够学习非线性流形结构,但由于本身属于直推学习,无法进行新样本的泛化.另外一些基于核函数的降维方法,如KPCA,尽管可以处理非线性问题,但又忽略了流形的非线性结构. NPE 作为局部线性嵌入(LLE)算法的线性逼近,它不仅能够捕捉流形的非线性结构,还保留了线性性质,能够进行新样本的泛化.因此,NPE 在效果令人满意的同时,还能够轻松应对新样本,在…
背景 线上某任务出现报警,报错日志如下: java.lang.NullPointerException: null at java.util.HashMap.merge(HashMap.java:1225) at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320) at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at jav…
[前言] java8新特性 java8 函数接口 java8 lambda表达式 Java 8 时间日期使用 java8 推出的Optional的目的就是为了杜绝空指针异常,帮助开发者开发出更优雅的代码,使用Optional不正确时,将会违背设计者的初衷. 一.Optional的构造方式: 1.Optional.of(T) 该方式的入参不能为null,否则会有NPE,在确定入参不为空时使用该方式. 2.Optional.ofNullable(T) 该方式的入参可以为null,当入参不确定为非nu…
一.前言 如果要给 Java 所有异常弄个榜单,我会选择将 NullPointerException 放在榜首.这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象). 还记得刚入行程序员的时候,三天两头碰到空指针异常引发的 Bug,解决完一个,又在另一处碰到.那时候师兄就教我,不要相信任何『对象』,特别是别人给你的,这些地方都加上判断.于是代码通常为会变成下面这样: if(obj!=null){ // do something } 有了这个防御之后,虽…