【发布时间】:2010-09-02 22:08:51
【问题描述】:
所以我一直在阅读 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(g);
作为可读代码的大力支持者,我非常喜欢它。
第 2 点:一般来说,他建议使用不可变的类。他深入探讨了为什么拥有不可变的类比拥有一个可能处于多个不同状态的类要好得多。我可以肯定地说,他把这个想法卖给了我,我迫不及待地想让我从现在开始写的大多数课程都是不可变的,除了......
当你有一个带有巨大构造函数的不可变类时会发生什么?你不能为它创建setter方法;那会破坏不变性。我尝试浏览本书的其余部分,但我认为他没有提供解决方案。
有可能使一次性使用 setter 方法,但只是 setter 方法可用于假定为不变性的类这一事实令人沮丧,即使如果您随后尝试它确实会抛出异常.
有人对如何处理这个问题有任何好的想法吗?我目前在工作中面临这个问题,我有一个带有巨大构造函数的不可变类,我想在不破坏不变性的情况下将其重构为更具可读性的东西。
【问题讨论】:
-
这似乎是一个有用的概念,即从一个通用抽象基(它为所有属性宣传 getter)派生一个可变和不可变类。不可变类的构造函数可以接受基类的参数。不知道如何允许可变类使用读写属性来隐藏抽象的只读属性,但不创建实现只读属性的中间类。
标签: java immutability readability