最佳实践:Java属性可能为null

时间:2015-10-04 19:55:04

标签: java constructor getter

所以我有一个带有5个不同变量的构造函数,其中三个可能为null。它接受用户输入,用户无需为五个属性中的三个输入任何内容 因此,如果用户没有输入任何内容,则使用null为所有缺失值创建对象。

obj = new Object(String, null, null, null, String);

现在我想知道应对这种情况的最佳做法是什么 我可以想到三种不同的场景:

  • 仅在使用构造函数的类中处理它,即始终查询值是否为null(例如if(getSomeAttribute == null) { //do something }
  • 在对象类中处理它,即始终为每个缺少的属性返回一些默认值,而不是null
  • 在对象lcass中处理它,即使用像isAttributeSet()这样的辅助方法,返回一个布尔值,指示是否设置了属性,即:not null。

虽然我在最后两个方面遇到问题,但我认为我可能会遇到默认值问题,因为有时很难知道它是否是默认值;如果我总是检查我也可以检查null而不是先插入默认值;
与最后一个相同,如果我必须检查辅助方法,我也可以直接检查null
我的问题是这种情况,有时我可能不是那个使用getter和setter方法的人;应该如何使用它知道可能存在空属性和哪些属性 我知道,我应该在我的对象课程中记录这一点,但我仍然想知道是否有一种“最佳实践”方式来应对这种情况。
我认为总是检查纪录片(或者如果没有,全班)对于这样简单的事情应该是不寻常的。
也许我首先不应该在构造函数中以null值开头?但是我认为无论如何我会遇到同样的问题,所以这不会真正解决我的问题

2 个答案:

答案 0 :(得分:6)

阅读Bloch,Effective Java,第2版。第2项:“在面对许多构造函数参数时考虑构建器。”

优秀书中的优秀建议。

答案 1 :(得分:0)

使用构建器模式可以帮助构造函数,但是主要问题是与类的设计有关 - 您希望确保在调用get / set方法时它不是其中之一null /可选成员。

您可以使用多态来拥有两个对象,每个对象都有一个接口,该接口仅公开具体实现支持的getter和setter。这使得调用错误的getter / setter是不可能的,而且显而易见的是。