【发布时间】:2019-10-31 10:32:49
【问题描述】:
查看和挖掘我的代码,我注意到我们通常彻底使用来自 Lombok 的 @Setter。
这让我想知道@Setter的用法。
确实,使用@Setter 比简单地通过其可见性使字段可访问更有趣吗?
据我了解,在其中一种情况下,setter 更可取(感谢Why use getters and setters/accessors?):
- 您希望您的对象对正在设置的字段做出反应
- 你想懒惰地计算一个字段的值
- 你想模拟(虽然我深认为可测试性不应该主导你的代码设计)
- 类可以被继承而设置器被覆盖
但是有些对象不符合这些情况。
在代码方面,是这样的:
@Getter
@Setter
public class Person{
private String firstName;
private String lastName;
}
比这更可取(在可维护性和可读性方面):
public class Person{
public String firstName;
public String lastName;
}
作为旁注,我想补充一点,我发现
person.firstName = "Vincent"比person.setFirstName("Vincent")更具可读性。
【问题讨论】:
-
“虽然我深深地认为可测试性不应该主导你的代码设计”。哇。
-
您距离例如 1 步之遥时髦的
-
@Kayaman 您对此有何看法?你能详细说明一下吗?我擅长通过突变覆盖实现 100% 覆盖。但是修改你的代码只是让它可测试是乏味的,你不觉得吗?如果您有任何关于此主题的文章/资源,我很乐意阅读!
-
您的问题似乎从根本上与使用 setter 与不使用 setter、不 使用 lombok 与不使用 lombok 有关。
-
@VincentC。互联网上充满了推广可测试代码的资源,TDD 处于极端。这基本上是一个“你想要高质量的代码”的问题,而你的意见是“它不那重要”。尤其是如果你不能给出为什么我们不应该编写可测试代码的论据,但我无法想象除了“让我们快点做这件事,赚钱并运行”之外的任何其他原因。