在上一家公司工作时候,遇到过一个bug:构造函数里出现了未初始化的变量,导致了空指针异常(java.lang.NullPointerException),于是乎,我开始思考什么才是一个好的构造函数。
我们通过常见的构造函数(constructor)的问题,进行探讨。
-
constructor中出现空指针问题。 Example:
1 2 3 4 5 6 7 8
//代码1 class A{ public A(){ //获取文件读取类 //读取信息 } }
这里,若是文件读取类需要相关配置,而该配置还没进行配置,则会出现空指针异常。
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
//代码2 class 平台类{ public void start(){ //初始化文件类 //读取文件类信息 new A(信息) } } class A{ public A(信息){ //... } }
这里,只要我们明确生命周期,在文件读取类初始化之后再进行调用即可。
问:什么时候会出现这种问题。
答:整个系统生命周期乱,且捕捉错误能力差。
-
数据参数过多。
- 通过bean或arraylist等装在参数,之后再传入constructor。
- 通过代码分离,一个类分成两个类进行处理。
- 使用setter代替非必要参数,从而简化代码。(可选择Method chaining)
-
其他值得注意:
-
明确constructor是用于初始化,不要添加其他用途(单一功能原则)。
就像线程类,不会在初始化时运行那样。
-