首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

null 不好,我推荐你使用 Optional

他在 2014 年一篇文章中说过:“Null sucks.”1,意思是 null 很糟糕。他认为 null 是一种不明确表示,它既可以表示一个值不存在,也可以表示一个值未知,也可以表示一个值无效。...虽然 null 引用可以用来表示一个值不存在或未知,也可以用来节省内存空间。但是它也不符合面向对象思想,因为它不是一个对象,不能调用任何方法或属性。...如果我们不确定一个值是否空,可以使用 Optional.ofNullable 方法,它会根据值是否空,返回一个相应 Optional 对象。...super T,Optional> mapper):如果 Optional 对象包含一个值,对该值进行 mapper 参数操作,返回新 Optional 对象,否则返回一个空 Optional...or():这个方法可以让我们在 Optional 对象空时,返回一个预设值。

12430

null 不好,我真的推荐你使用 Optional

他在 2014 年一篇文章中说过:“Null sucks.”1,意思是 null 很糟糕。他认为 null 是一种不明确表示,它既可以表示一个值不存在,也可以表示一个值未知,也可以表示一个值无效。...虽然 null 引用可以用来表示一个值不存在或未知,也可以用来节省内存空间。但是它也不符合面向对象思想,因为它不是一个对象,不能调用任何方法或属性。...Optional 类可以看作是一个容器,它可以包含一个值,也可以为空。Optional 类提供了一些方法,让我们可以更方便地处理可能为空值,而不需要显式地进行空值检查或者使用 null。...如果我们不确定一个值是否空,可以使用 Optional.ofNullable 方法,它会根据值是否空,返回一个相应 Optional 对象。...super T,Optional> mapper) 如果 Optional 对象包含一个值,对该值进行 mapper 参数操作,返回新 Optional 对象,否则返回一个空 Optional

24050
您找到你想要的搜索结果了吗?
是的
没有找到

equals方法变量和常量位置区别

在找db2 9.7fp11与fp4 jdbc驱动有什么区别的时候,反编译了一下官方驱动jar包,发现里面不少equals方法依然把未知变量放到了equals左边,已知放到了右边,难道IBM程序员水平这么次么...equals 方法空对象引用上实现相等关系: 自反性:对于任何空引用值 x,x.equals(x) 都应返回 true。...Object 类 equals 方法实现对象上差别可能性最大相等关系;即,对于任何空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true...注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法常规协定,该协定声明相等对象必须具有相等哈希码。 参数: obj - 要与之比较引用对象。...null导致空指针异常,但是这么写并不能避免括号内变量引用某些方法或者属性导致空指针,例如 String str=null; System.out.println("0".equals(

81521

Java8 Stream简介

(Collectors.toList()); map map方法根据传入mapper函数对元素进行一对一映射, 即数据每一个元素都会在结果中被替换(映射)mapper函数返回值....()); flatMap 与map不同flatMap进行多对一映射, 它要求若数据元素类型R, 则mapper函数返回值必须Stream. flatMap会使用mapper函数将数据元素一一映射...()); peek peek方法会对数据中所有元素进行给定操作, 但在结果中仍然是数据元素....首先将数据两个元素x1和x2传给accumulator得到r1, 然后将r1和x3传入得到r2....流可以在线程安全集合上创建, 流操作不应该对线程安全数据产生任何副作用, 否则将发生java.util.ConcurrentModificationException异常.

31010

LINQ查询操作符 LINQ学习第二篇

九、生成操作符 生成是创建新值序列。 1. Empty Empty操作符返回一个指定类型空集合。这里空不是null,而是元素数量0集合。...如果你使用了DefaultIfEmpty方法重载方法DefaultIfEmpty(IEnumerable array),如果指定array集合为空,那么将返回一个类型T,值null单个对象...ToList ToList操作符可以在IEnumerable 类型任何派生对象上调用,返回值List类型对象。 7....给定参数化类型 T 一个变量 t,只有当 T 引用类型时,语句 t = null 才有效;只有当 T 数值类型而不是结构时,语句 t = 0 才能正常使用。...如果序列1null,抛出异常。 如果序列2null,抛出异常。 遍历序列1。在此过程中,如果序列2到达底端则返回false;如果序列1的当前值与序列2的当前值不同,则返回false。

3.1K50

Java中Stream操作

特点 代码简洁:函数式编程写出代码简洁且意图明确,使用stream接口让你从此告别for循环 多核友好:Java函数式编程使得编写并行程序如此简单,就是调用一下方法操作过程 流创建 => 中间操作...5); iterate方法接受两个参数,第一个初始化值,第二个进行函数操作,因为iterator生成无限流,通过limit方法对流进行了截断,只生成5个偶数 generator Stream... generateStream = Stream.generate(Math::random).limit(5); generate方法接受一个参数方法参数类型Supplier ,由它为流提供值...string.isEmpty()).collect(Collectors.toList()); map 接受一个函数作为参数。...()); distinct 返回一个元素各异(根据流所生成元素hashCode和equals方法实现)流 List numbers = Arrays.asList(1, 2, 1, 3, 3, 2,

46720

没用 Java 8,怎么优雅地避免空指针?

一个Optional实例可能包含null引用(我们称之为引用存在present),也可能什么也不包括(称之为引用缺失absent)。它从不说包含null值,而是用存在或缺失 来表示。...=Optional.absent();//创建引用缺失Optional实例,就是NULL } 熟悉使用常见方法: isPresent():如果Optional包含null引用(引用存在),返回...如同输入参数方法返回值也可能是null。...和其他人一样,你绝对很可能会忘记别人写方法method(a,b)会返回一个null,就好像当你实现method(a,b)时,也很可能忘记输入参数a可以为null。...将方法返回类型指定为Optional,方法参数设置Optional,也可以迫使调用者思考返回引用缺失情形。

85220

java8 函数式编程一

()); flatMap 方法相关函数接口和 map 方法一样, 都是 Function 接口, 只是方法返回值限定为 Stream 类型罢了。...Integer sum1 = Stream.of(1, 2, 3).reduce(0, (acc, e) -> acc + e); 上述执行求和操作,有两个参数: 传入 Stream 中初始值和 acc...总不能升级完 java8,第三方类库中集合实现全都不能用了吧? 为此,java8 在接口中引入了"默认方法"概念!默认方法接口中定义包含方法方法方法名有 default 关键字做前缀。...Java8 对 null 字段也引进了自己处理,既不用一直用 if 判断对象是否 null,来看看?...public static List getAssistant(Long tenantId) { // ofNullable 如果 value null,会构建一个空对象

92630

原理解读:Spring MVC统一异常处理

很明显,在doDispatch()方法内有两容易抛出异常,第一在为Http请求寻找相匹配Handler过程中,Handler是什么东东?...,一般可以归纳两种:一种是执行Handler后抛出异常,比如:业务逻辑层中未知运行时异常和开发人员自定义异常;另一种是还未开始执行Handler,而是在为其方法参数进行数据绑定时抛出异常,比如...2 异常如何处理 无论是在获取Handler过程中、在为Handler方法参数进行数据绑定过程中亦或在Handler执行过程中出现了异常,总是会先将该异常实例赋予dispatchException这一局部变量...构造方法参数,后者会解析出含有@ExceptionHandler注解异常处理方法,按照以Class<?...(value = Exception.class)标注方法,但千万不要通过getMessage()将异常信息反馈给调用方,因为异常是未知,可能会将很长串异常堆栈信息暴漏出来,这样既不友好也不安全,

1.1K21

【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)

因此针对这个方法分析需要分并行与并行两个场景。 就是因为U和T不一样,所以给了我们更多发挥。...r1或者r2其返回值,甚至可以指定null返回值。...由于Map中有Key和Value这两个值,故该方法与toSet、toList处理方式是不一样。toMap最少应接受两个参数,一个用来生成key,另外一个用来生成value。...key ** 2、当valuenull时,会抛出异常:java.lang.NullPointerException toMap(Function keyMapper,Function valueMapper...,采用三个参数toMap进行改良 // java8理思路:即 两个key相同时 只能有一个key存在,那对应value如何处理?

3.1K40

JavaScript基础:call,apply,bind详解,三者有何区别和联系

定为null,undefined,fun中this指向window对象....如果param不传或为 null/undefined,则表示不需要传入任何参数. apply第二个参数数组,数组内传给fun参数。...context === undefined) {        // 指定为 null 和 undefined  this 值会自动指向全局对象(浏览器中window)         context...思路: 传递给函数参数处理,不太一样,其他部分跟call一样。 apply接受第二个参数类数组对象, 这里用了JavaScript权威指南中判断是否类数组对象方法。...{         context = window // 指定为 null 和 undefined  this 值会自动指向全局对象(浏览器中window)     } else {

1.1K10

RuntimeException和Exception区别

可以理解错误,必须要开发者解决以后才能编译通过,解决方法有两种, 1:throw到上层, 2,try-catch处理。...异常分类 Error:一般底层不可恢复类; Exception:分为未检查异常(RuntimeException)和已检查异常(RuntimeException)。...java.lang.IllegalArgumentException 这个异常解释是”方法参数错误”,很多j2me类库中方法在一些情况下都会引发这样错误,比如音量调节方法音量参数如果写成负数就会出现这个异常...当对数组索引值负数或大于等于数组大小时抛出。 java.lang.ArrayStoreException 数组存储异常。当向数组中存放数组声明类型对象时抛出。...java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象地方使用了 null时,抛出该异常。

1.1K10

贪婪算法-单最短路径

这个问题通常称为单最短路径问题 1.无权最短路径(唯一) 算法分析 由于图没有权,所以我们只需要关注路径上边 无权最短路径实质上是特殊有权最短路径,因为我们可以将每条边按权为1理。...我们可以一层一层处理,先找与s距离1节点,之后找距离2节点,直到所有节点都被访问到。 注: 按层搜索图方式,称为广度优先搜索,这种搜索方式类似树层序遍历。...初始情况下声明所有节点最短路径未知 起点s声明最短路径0,并将s入队。...O(|E|+|V|) 2.有权无负值最短路径 Dijkstra算法是解决有权无负值单最短路径经典算法。...) 问题定义 针对一个有权图,该图权有负值,使用某个顶点s作为输入参数,找出该顶点s到其他顶点最短距离。

1.1K50

dotNET Core WebAPI 统一理(返回值、参数验证、异常)

现在 Web 开发比较流行前后端分离,我们产品也是一样,前端使用Vue,后端使用 dotNet Core WebAPI ,在写 API 过程中有很多地方需要统一理 文档 参数验证 返回值 异常处理...本文就说说 API 统一理这些事。...返回值 返回值统一理需要下面几个步骤: 创建统一返回结果实体类,所有的接口方法都返回固定格式,方便前端统一理 创建过滤器,过滤器用来拦截请求,包装结果,统一输出 Startup 类中进行配置注册...继续重构参数验证 添加了返回值过滤器类后,调用之前参数验证接口,会发现返回结果如下 { "code": 200, "message": null, "result": [ {...2、修改 ValidateModelAttribute 过滤器,在修改代码之前,先要添加名为 ValidationFailedResult 类,该类继承 ObjectResult ,用做参数验证结果收集

11K60
领券