所以我一直在阅读Joshua Bloch撰写的Effective Java,并注意到我在工作中遇到的两点.
第1点: 制作setter方法以使代码更具可读性.在他的例子中,我们有一个带有一个非常庞大的构造函数的类.当人们实例化这个类时,很难说出所有参数都在发生什么.因此,他建议制作一个简约的构造函数,并为所有其他选项设置setter方法,因此不是......
MyClass clazz = new MyClass(a,b,c,d,e,f,g);
你会写....
MyClass clazz = new MyClass(a,b,c);
clazz.setDitto(d);
clazz.setEcho(E);
clazz.setFunzies(F);
clazz.setGumballs(克);
作为可读代码的巨大支持者,我非常喜欢.
第2点: 一般来说,他建议使用不可变类.他深入研究了为什么不可变类比拥有可能处于几个不同状态的类要好得多.我可以肯定地说他把这个想法卖给了我,我迫不及待地想把我从现在开始写的大部分课程变成一成不变的,除了....
当你有一个带有巨大构造函数的不可变类时会发生什么?你不能为它制作setter方法; 这将破坏不变性.我试着浏览本书的其余部分,但我不认为他为此提供了解决方案.
有可能使用一次性使用setter方法,但只是一个setter方法可用于一个被认为是不变的类的事实令人沮丧,即使它只是在你后续尝试时抛出异常.
有没有人对如何处理这个问题有任何好的想法?我目前正在处理这个问题,我有一个带有巨大构造函数的Immutable类,我想重构一些更易读的东西,而不会破坏不变性.