vbe*_*nar 23 java getter naming-conventions java-14 java-record
Java 14 引入了记录功能。Record 创建与字段同名的 getter,因此可以编写print(person.name())例如。但是旧的 Java bean 约定规定应该将此方法命名为getName().
在同一个代码库中使用这两种样式看起来不太好。将所有内容迁移到记录是不可能的,因为它们太有限而无法替换所有用例。
是否有任何官方或半官方指南如何在新代码中以 Java 14 命名 getter 和 setter?
小智 14
引自JEP 359:
宣布“向样板开战”不是目标;特别是,使用 JavaBean 命名约定解决可变类的问题并不是目标。
我的理解是,基于同一个文档,记录是transparent holders for shallowly immutable data.
话虽如此:
总而言之,恕我直言,他们向前迈进了一步......我写了这个例子集,你可以看到代码从标准 JavaBeans 减少到 ~15% LOC。
另外,请注意records behave like normal classes: they can be declared top level or nested, they can be generic, they can implement interfaces(来自同一文档)。实际上,您可以通过提取包含 getter 的接口来部分模拟 JavaBeans(不过,只有 getter 才有意义)——但这需要大量工作,而不是一个真正干净的解决方案......
所以,根据上面的逻辑,为了解决你的问题,不- 我没有看到任何关于 getter 和 setter 的(半)官方指南,我认为现在没有动机,因为再次记录不是 JavaBeans 的替代品...
从 Java 17 开始,该record规范现已成为“最终版” ,但不幸的是,这种命名约定差异尚未得到解决。当我尝试利用 Records 作为浅层持有者类来实现现有域模型的接口部分时,我偶然发现了它。
虽然这不是我想要的那么简洁的解决方案,但 Records 可以有方法,因此您可以向您的 中添加“遗留”getter record,如下面的(人为但简单)示例所示。
public interface Nameable {
public String getName();
}
public record Person(String name) implements Nameable {
public String getName() {
return name; // or return name();
}
}
Run Code Online (Sandbox Code Playgroud)
至少这允许客户端代码继续使用经过尝试和测试(已有 20 多年历史)的约定,让我们面对现实吧,该约定的使用量远远超过纯 JavaBeans 上下文。
你可以说语言设计者已经履行了“不向样板宣战”的职责
| 归档时间: |
|
| 查看次数: |
2832 次 |
| 最近记录: |