南昌专业的电商网站开发公司新公司注册详细流程
news/
2025/9/26 7:18:36/
文章来源:
南昌专业的电商网站开发公司,新公司注册详细流程,网站表单提交,seo职位描述作者| 沉默王二责编| Carol封图| CSDN│下载于视觉中国从 10 年前我开始写第一行 Java 代码至今#xff0c;一直觉得 null 在 Java 中是一个最特殊的存在#xff0c;它既是好朋友#xff0c;可以把不需要的变量置为 null 从而释放内存#xff0c;提高性能#xff1b;它又是… 作者| 沉默王二责编| Carol封图| CSDN│下载于视觉中国从 10 年前我开始写第一行 Java 代码至今一直觉得 null 在 Java 中是一个最特殊的存在它既是好朋友可以把不需要的变量置为 null 从而释放内存提高性能它又是敌人因为它和大名鼎鼎且烦不胜烦的 NullPointerExceptionNPE如影随形而 NPE 的发明人 Tony Hoare 曾在 2009 年承认“Null References 是一个荒唐的设计就好像我赌输掉了十亿美元”。你看null 竟然是一个亦敌亦友的家伙。通常为了表示列表中的元素不存在我们首先想到的就是返回 null这种想法很合理合理到无法反驳。我们来模拟一个实际的应用场景假设作者现在要从数据库中获取一个姓名的列表然后将姓名打印到控制台对应的代码如下。public class NullDemo {public static void main(String[] args) {ListString names getNamesFromDB();if (names ! null) {for (String name : names) {System.out.println(name);}}}public static ListString getNamesFromDB() {// 模拟此时没有从数据库获取到对应的姓名。return null;}
}
由于 getNamesFromDB() 方法返回了 null 来作为没有姓名列表的标志那就意味着在遍历列表的时候要先对列表判空否则将会抛出 NPE 错误不信你把 if (names ! null) 去掉试试立马给你颜色看。Exception in thread main java.lang.NullPointerExceptionat com.cmower.dzone.stopdoing3things.NullDemo.main(NullDemo.java:12)
那假如作者在遍历的时候不想判空又不想代码抛出 NPE 错误他该怎么做呢闭上你的大眼睛好好想一想。嗯报告我想出来了建议作者从数据库中获取姓名的时候返回长度为 0 的列表来表示未找到数据的情况。代码示例如下所示public class Null2Length0Demo {public static void main(String[] args) {ListString names getNamesFromDB();for (String name : names) {System.out.println(name);}}public static ListString getNamesFromDB() {// 模拟此时没有从数据库获取到对应的姓名。return Collections.emptyList();}
}
注Collections.emptyList() 用于返回一个不可变的空列表能理解吧假如不能理解的话我再写一个返回可变的空列表的示例你对比着感受一下就理解了。public class Null2Length0MutableDemo {public static void main(String[] args) {ListString names getNamesFromDB();for (String name : names) {System.out.println(name);}}public static ListString getNamesFromDB() {// 模拟此时没有从数据库获取到对应的姓名。return new ArrayList();}
}
new ArrayList() 返回的就是可变的意味着你还可以改变这个列表的元素比如说增加删除是不可能的了因为本身就没有元素可删。你看Collections.emptyList() 和 new ArrayList() 都可以替代 null来减少打印列表时不必要的判空以及那个讨厌的家伙——NPE。除了我这个想法之外你还能想到其他的解决方案吗来再次闭上你的大眼睛替作者想一想没准你还能想到一个—— Java 8 新增的 Optional 类一个容器类可以存放任意类型的元素如果值存在则isPresent() 方法会返回 trueOptional 类提供了很多专业的方法而不用显式进行空值检查从而巧妙地消除了 NPE。来先读示例为快public class Null2OptionalDemo {public static void main(String[] args) {OptionalListString list getNamesFromDB();list.ifPresent(names - {for (String name : names) {System.out.println(name);}});}public static OptionalListString getNamesFromDB() {boolean hasName true;if (hasName) {String [] names {沉默王二, 一枚有趣的程序员, 微信搜索关注我};return Optional.of(Arrays.asList(names));}return Optional.empty();}
}
看得不太懂我来负责任地介绍一下你们握个手。假如数据库中存在姓名则使用 Optional.of() 对返回值进行包装从而返回一个 Optional 类型的对象。为什么不用构造方法呢因为构造方法是 private 的源码如下所示。private Optional(T value) {this.value value;
}
那为什么要用 Optional.of() 呢嗯good question。继续上源码。public static T OptionalT of(T value) {return new Optional(Objects.requireNonNull(value));
}
1如果 value 为 null那么 Objects.requireNonNull(value) 就会抛出 NPE嗯哼总归是要碰面的但好歹不用我们程序员主动 check 了。2如果 value 不为 null则通过 new 关键字创建正常的 Optional 对象。假如数据库中不存在姓名呢使用 Optional.empty() 作为返回值。来继续上源码。public staticT OptionalT empty() {SuppressWarnings(unchecked)OptionalT t (OptionalT) EMPTY;return t;
}
嗯哼EMPTY 是什么玩意private static final Optional? EMPTY new Optional(null);
竟然是 Optional 类的一个私有常量static final。怎么此刻我的脑子里想起了安徒生先生的寓言故事——皇帝的新衣嗯甭管了反正“底层终究是丑陋的”。这样的话就可以使用 Optional 对象的 ifPresent() 方法来判断值是否存在如果只需要处理值存在的情况就可以使用 Lambda 表达式的方式直接打印姓名。list.ifPresent(names - {for (String name : names) {System.out.println(name);}
});
有点简单粗暴对不对但不管怎么说终于可以在表象上和 nullNPE 说拜拜了做人嘛开心点~如果你有其他想法欢迎在评论区和我们交流《原力计划【第二季】- 学习力挑战》正式开始即日起至 3月21日千万流量支持原创作者更有专属【勋章】等你来挑战推荐阅读不看就亏系列这里有完整的 Hadoop 集群搭建教程和最易懂的 Hadoop 概念| 附代码
时间复杂度的表示、分析、计算方法……一文带你看懂时间复杂度
30万行数据Python 分析科比二十年职业生涯 | 原力计划
谈论新型冠状病毒、比特币、苹果公司……沃伦•巴菲特受访中的 18 个金句值得一看
一张图对比阿里、腾讯复工的区别
Python数据清理终极指南2020版
真香朕在看了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917938.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!