我的名字叫阿超 年龄 21 岁 家在灶王镇西南部的别墅区区内 未婚 我在一家普通公司做 Java 开发 每天最晚也会在八点前回家 不抽烟 偶尔沾点酒 晚上十二点上床 保证睡足八个小时 睡前写一篇博客 再做二十分钟仰卧起坐暖身 然后再睡觉 基本能熟睡到天亮 像婴儿一样不留下任何疲劳和压力 就这样迎来第二天的早晨 医生都说我很正常。
阿超是新晋 Dromara 开源组织成员、Hutool Committer
目前技术栈包括不限于 Java、JavaScript、TypeScript、React、Vue、Python 等
热爱做开源,给 Sa-Token、Easy-ES 等项目都贡献过代码
正文
距离我加入 hutool-commiter 已经有一段时间了,想起曾经封装过的一个类 Opt,就是使用 lambda 解决空指针问题。按照惯例,先介绍下 dromara 组织下的项目 hutool
Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以 “甜甜的”。
这个类 Opt 的灵感来源是对 jdk 内置的 java.util.Optional 的拓展,在一些细节方面进行了简化处理 // 之前:String username;if (user != null && user.getUsername() != null) { username = user.getUsername();} else { username = "no name";}// 现在:String username = Opt.ofNullable(user).map(User::getUsername).orElse("no name");
关于 Opt 和 Optional 的差异我们先按下不表
下面主要是通过其介绍 lambda 的使用
快速上手
依靠 idea 编译器的提示进行快速上手
下方是判断 user 是否为空,不为空通过 User#getSchool() 获取学校名的操作
例如此处我写到这里 User user = new User();// idea提示下方参数,果没显示,光标放到括号里按ctrl+p主动呼出 |Function<? super User,?> mapper|Opt.ofNullable(user).map()
这里 idea 为我们提示了参数类型,可这个 Function 我也不知道它是个什么
实际上,我们 new 它一个就好了 Opt.ofNullable(user).map(new Fun) |Function<User, Object>{...} (java.util.function) | <-戳我 |Func<P,R> cn.hutool.core.lang.func |
这里 idea 提示了剩下的代码,我们选 Function 就行了,接下来如下: Opt.ofNullable(user).map(new Function<User, Object>() {})
此处开始编译报错了,不要着急,我们这里根据具体操作选取返回值
例如这里是想判断 user 是否为空,不为空时调用 getSchool,从而获取其中的返回值 String 类型的 school
我们就如下写法,将第二个泛型,也就是象征返回值的泛型改为 String: Opt.ofNullable(user).map(new Function<User, String>() {})
然后这里红线提示了,我们就使用 idea 的修复所有,默认快捷键 alt+ 回车
Opt.ofNullable(user).map(new Function<User, String>() {}) |
|