谁来检查方法参数合法性

我们在编程中的函数或者是方法,大多数都是有参数的。参数对于方法来说是很重要的输入数据,传入的参数值的合法性影响着方法的稳定性,严重时甚至可能导致崩溃问题的出现。

比如这段代码

1 2 3 4 5 6 7 8 9

public static void main(String[] args) { Book book = null; new Main().buy(book); } public void buy(Book book) { System.out.println(book.getPrice()); }

上面的代码在执行起来会导致空指针异常,其实解决起来也挺简单,就是做一些非空的检查,比如这样,在调用处进行校验

1 2 3 4 5 6

public static void main(String[] args) { Book book = null; if (book != null) { new Main().buy(book); } }

或者是这样在方法定义的时候处理

1 2 3 4 5

public void buy(Book book) { if (book != null) { System.out.println(book.getPrice()); } }

就这个案例而言,两者都可以,但是有没有什么规范呢

其实还是有一些约定的 如果方法是public,protected等这样被外部可调用的时候,方法定义时需要进行值的合法性检验,因为无法确保外部始终传递合法的参数值。 对于内部的private等可见性等,则不是必需的,因为内部调用相对是可控更高的。

除此之外,我们在JavaDoc注释也需要同步跟进,比如

1 2 3 4 5 6 7 8 9 10

/** * bub a book * @param book could be null */ public void buy(Book book) { if (book != null) { System.out.println(book.getPrice()); } }

我们通过增加@param book could be null就可以告诉调用者,不用做合法性检查,方法内部已经处理了。这种方式对开发者还是比较友善的。此外我们也可以使用@Nullable或者@NonNull来表明当前参数的检查职责归属。

至此我们也理清了检查方法参数合法性的责任归属,欢迎评论交流。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

JSP与EL表达式重点学习笔记(1)

Jsp&el表达式 JSP指令 ? JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件...

38590
来自专栏编程坑太多

springboot(17)统一异常处理

20620
来自专栏青青天空树

springboot+security整合3

  这篇讲解如何自定义鉴权过程,实现根据数据库查询出的url和method是否匹配当前请求的url和method来决定有没有权限。security鉴权过程如下:...

50920
来自专栏Ryan Miao

SpringMVC参数校验(针对`@RequestBody`返回`400`)

SpringMVC参数校验(针对@RequestBody返回400) From https://ryan-miao.github.io/2017/05/20/s...

55840
来自专栏Python疯子

数据库怎么存储手机号,QQ等纯数字内容,最省内存

19530
来自专栏静默虚空的博客

[spring]03_装配Bean

3.1 JavaBean 3.1.1 JavaBean 是什么 JavaBean 是一种JAVA语言写成的可重用组件。 为写成JavaBean,类必须是具体的和...

21090
来自专栏别先生

Spring的核心之IoC容器创建对象

Spring的Ioc容器,是Spring的核心内容:   作用:对象的创建和处理对象的依赖关系。 Spring容器创建对象有以下几种方式:   1:调...

22250
来自专栏一个会写诗的程序员的博客

《Groovy极简教程》第1章 Groovy简介《Groovy极简教程》第1章 Groovy简介参考资料

官网文档:http://www.groovy-lang.org/documentation.html Github源码:https://github.com/...

9320
来自专栏从流域到海域

Java Beans

JavaBeans事实上有三层含义。首先,JavaBeans是一种规范,一种在Java(包括JSP)中使用可重复使用的Java组件的技术规范,也可以说成我们常...

19260
来自专栏JAVA后端开发

activiti构造属于自己的流程定义

说起actviti,很多人都会说它支持bpmn标准,它的流转都是基于bpmn文件来运行! 但我们在设计流程时,流程定义真的只能是bpmn定义吗?   其实不...

33320

扫码关注云+社区

领取腾讯云代金券