为人父母, 一个比较纠结的事情, 就是到底怎么保护那个啥也不懂的小家伙. 如果护着她太紧了, 会不会让她失去和外部接触, 学习的机会, 变得孤僻, 依赖性强? 如果保护不利, 被人欺负了, 或者甚至被拐跑了, 后悔药没地方买呀. 到底要不要告诉她外面有很多坏人呐?
唉. 不自寻烦恼了. 埋头写代码!
不过, 嗯, 这个好像我写代码怎么也在想着类似的东西? "要不要检查这个参数是不是null?", "要不要判断当前状态对不对?"
一个好编程习惯是尽量不要用null, 除非特殊情况, 参数都不允许是null. 而那些特殊的需要null的场合, 用
@Nullable标注出来.
一般情况下, 如果你马上就会调用girl.kiss(), 这个girl如果是null的话, 你马上就能即时得到一个NullPointerException, jvm已经帮你做了null检查. 但是有时候, 比如对构造函数来说, 参数不是马上使用, 而是存在成员变量里面, 以后再用. 这时候检查就很重要了. 否则, 如果客户不小心传递一个null, 错误就要延后到可能很久以后才会发现了.
最直观的检查就是:
if (girl == null) {
throw new NullPointerException("谁这么缺德, 给我一个山寨美眉呀?!");
}
但是这有点繁琐, 瓜娃有一个工具, 叫
Preconditions.
用它, 上面的代码可以简化成:
Preconditions.checkNotNull(girl, "谁这么缺德, 给我一个山寨美眉呀?!");
Preconditions还有两个常用的检查: checkArgument()和checkState(). 用法大同小异. 一个用来检查参数, 一个用来检查对象状态. 一个抛IllegalArgumentException, 一个抛IllegalStateException.
Preconditions这些工具函数有一个潜在的问题: 当你写测试同时用测试覆盖工具的时候, 如果你用传统的if-else, 测试覆盖工具会告诉你如果你忘记了测试那个错误情况. 而用了Preconditions, 这些工具就被骗了, 只会傻乎乎地报告100%覆盖.
分享到:
相关推荐
银地公司的案例涵盖了多个审计风险点,对于备考CPA的考生而言,有着极高的学习价值。 首先,银地公司的概况和未来规划部分,涉及到了企业的战略发展和项目投资,这对于评估企业的整体风险至关重要。考生需要了解...
从投资策略角度来看,报告建议投资者关注“银地保+基建+港股”板块。报告指出,股市风格可能回归到“低估值”阶段,而上述三个板块在2021年的表现与2018年相似,有希望重现2019年初的上涨趋势。此外,在当前“资产荒...
TAC顶刊报告:'多智能体分布式自适应一致性控制(含纯一致性与leader-follower一致性)'及其Matlab复现代码.pdf
SVPWM仿真与基于DSP28335的PIL(处理器在环)仿真模型验证算法可行性与实时性的实践研究.pdf
VSG仿真、并网与离网运行仿真、预同期并网控制及虚拟同步机逆变器仿真.pdf
SSA-RF与RF神经网络多元回归预测(Matlab 程序及运行指南).pdf
Simulink微网多逆变器下垂控制仿真模型:固定与可调的下垂系数、SVPWM与算法控制的并联运行.pdf
电磁场与电磁波28
SSA-CNN-LSTM时间序列预测(Matlab)_ 麻雀算法优化卷积长短期记忆网络.pdf
C++知识点汇总.md.zip
T型逆变器仿真(SPWM)Matlab 2021a:LCL滤波器下纯阻性负载的五电平波形仿真.pdf
STM32G431 FOC线性磁链观测器无感FOC驱动资料(非VESC、非ST电机库生成,支持直接零速闭环启动及电位器转速控制)”.pdf
STM32F103 SAE CAN开放协议源码(含半年咨询费+中文注释及原理说明).pdf
Java项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文
Simulink导弹制导系统仿真模型文件使用指南及视频讲解.pdf
内容概要:本文深入介绍了Caffe深度学习框架,涵盖其历史背景和发展、安装配置、卷积神经网络(CNN)的基础理论及其实现。具体内容包括CNN各个层级的工作原理、Caffe中的网络模型定义和训练方法、LeNet与AlexNet的实际运用、迁移学习及模型的性能优化等。通过详细的实战操作演示,文章帮助开发者掌握在Caffe上搭建CNN的方法和技术。 适合人群:从事计算机视觉领域的研究人员和工程师,尤其是想要深入了解卷积神经网络和掌握Caffe框架的人群。 使用场景及目标:本文适合作为学习材料用于理解卷积神经网络的概念和工作机制,指导初学者和有经验的开发者如何利用Caffe实现图像识别、目标检测等任务;并且帮助读者掌握模型训练和性能优化的相关技能。 其他说明:文中提供了大量代码片段与实例讲解,方便读者理解和实践;此外还对比了几款主流深度学习框架的优势,辅助决策选用合适的开发工具。
1、文件说明: Centos8操作系统vim-editorconfig-1.1.1-1.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf vim-editorconfig-1.1.1-1.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
VMD信号分解算法:VMD功率分解与滚动轴承故障检测.pdf
STM32 IAP固件升级程序源代码(串口环形队列接收模式实现固件升级程序).pdf
VSC直流输电仿真案例:两电平结构换流站与双环控制的应用.pdf