我一直在阅读 Joshua Bloch 的 Effective Java,注意到两个点,这些点我在我的工作中也遇到了。
第一点:使用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);
对于我这个强烈支持可读性代码的人来说,我非常喜欢这个建议。
第二点:总体上,他建议使用不可变类。他详细解释了为什么使用不可变类比拥有可能处于多种状态的类更好。我可以肯定地说,他让我相信了这个想法,我迫不及待地想让我编写的大多数类都是不可变的,除了……
当你有一个具有巨大构造器的不可变类时会发生什么?你不能为它创建setter方法,那样会破坏不可变性。我试图快速浏览整本书,但我认为他没有涉及解决此问题的方法。
有可能会使用一次性使用setter方法,但即使它只是在尝试后抛出异常,一个可变性类仍然拥有setter方法,这让人感到沮丧。
是否有任何好的想法来处理这个问题?我目前在工作中面临这个问题,我有一个具有巨大构造器的不可变类,我想将其重构为更易读的内容,而不破坏其不可变性。
第一点:使用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);
对于我这个强烈支持可读性代码的人来说,我非常喜欢这个建议。
第二点:总体上,他建议使用不可变类。他详细解释了为什么使用不可变类比拥有可能处于多种状态的类更好。我可以肯定地说,他让我相信了这个想法,我迫不及待地想让我编写的大多数类都是不可变的,除了……
当你有一个具有巨大构造器的不可变类时会发生什么?你不能为它创建setter方法,那样会破坏不可变性。我试图快速浏览整本书,但我认为他没有涉及解决此问题的方法。
有可能会使用一次性使用setter方法,但即使它只是在尝试后抛出异常,一个可变性类仍然拥有setter方法,这让人感到沮丧。
是否有任何好的想法来处理这个问题?我目前在工作中面临这个问题,我有一个具有巨大构造器的不可变类,我想将其重构为更易读的内容,而不破坏其不可变性。