我们可以停止构造函数的运行吗?

Sap*_*apG 8 java constructor

我需要创建某种类型的对象.对象的类只有一个构造函数(我写的一个).

我的程序接收创建具有参数ID的对象实例的请求.如果ID参数包含不是数字的char,我想停止构造函数.

我之前无法检查参数,因为我不是调用构造函数的人.

cro*_*wne 20

使构造函数成为私有的并公开一个静态工厂方法,如果参数有效,它将验证并返回该对象的新实例.


biz*_*lop 6

"停止"构造函数的唯一方法是抛出异常.当然要记住调用者应该"知道"这个异常,并能够处理构造函数失败的情况.

从构造函数中抛出异常并不会阻止正在创建的对象,它只是使其对变量的引用赋值失败并且引用不可用(因此有资格进行垃圾回收),除非你犯了传递this给外部的错误构造函数本身的方法.(无论如何你不应该这样做.)


Tom*_*han 5

如何解决这个问题取决于当给出非法字符时您希望发生什么,这又取决于我们正在讨论的对象以及使用它的库如何使用它。

最合理的做法是抛出一个IllegalArgumentException,这就是我建议你这样做的。

return null然而,即使我强烈建议不要这样做,也可能有意义(您不能直接在构造函数中执行此操作,但您可以创建一个工厂方法来执行此操作)。