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

lis*_*isa 2 java getter constructor

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

obj = new Object(String, null, null, null, String);
Run Code Online (Sandbox Code Playgroud)

现在我想知道什么是最好的做法来应对这一点.
我可以想到三种不同的场景:

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

虽然我在后两个方面遇到问题,但我认为我可能会遇到默认值的问题,因为有时很难知道它是否是默认值; 如果我总是检查我也可以检查null而不是先插入默认值;
与最后一个相同,如果我必须检查辅助方法,我也可以直接检查null.

我的问题是这种情况,有时我可能不是那个使用getter和setter方法的人; 如何使用它知道可能有null属性,哪些属性.
我知道,我应该在我的对象类中记录,但我仍然想知道是否有一种"最佳实践"的方式来应对这种情况.
我认为总是检查纪录片(或者如果没有,整个班级)这样简单的事情应该是不寻常的.
也许我首先不应该在构造函数中以null值开头?但我认为无论如何我会遇到同样的问题,所以这不会真正解决我的问题

ros*_*sum 6

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

一本优秀书中的优秀建议.

  • 这是[Google图书中的项目](https://books.google.com/books?id=ka2VUBqHiWkC&lpg=PA5&pg=PA11#v=onepage&q&f=false),这里是[源代码](https:// github该项目的.com/marhan/effective-java-examples/tree/master/src/main/java/org/effectivejava/examples/chapter02/item02). (2认同)