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

时间:2011-03-09 18:48:10

标签: java constructor

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

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

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

3 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

如何解决这个问题取决于你给出非法角色时你想要发生什么,而这又取决于我们谈论的对象,以及消费库如何使用它。

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

但是,仅return null也是有意义的,即使我强烈建议不要这样做(你不能直接在构造函数中这样做,但是你可以创建一个工厂方法来做到这一点)。