在开创性的书The Elements of Java Style中,它说:
遵循JavaBeans约定来命名属性访问器方法。 JavaBeans规范建立了标准命名 允许访问a属性的方法的约定 JavaBean实现。您应该在何时应用这些约定 在任何类中命名方法,无论它是否实现了 豆。
在创建简单(无副作用)属性访问器时,我们的项目遵循is/get/set
的此规则。但我的问题是 - 使用get和set启动其他方法会让人感到困惑吗?
例如,假设我有一个方法调用外部系统来获取全局序列中的下一个数字。是否将此方法getNextId()
命名为不良做法?
我会这么认为,因为它让我认为nextId是序列对象的属性,而实际上并非如此。我认为更好的名称是nextId()
或fetchNextIdFromExternalSystem()
。
这里的最佳做法是什么? is/get/set
是否应仅限于属性访问者?
答案 0 :(得分:6)
Getters不必专门映射到支持字段。他们只需按照他们所说的去做:返回一个以某种方式包含在该类中的值。
这没有说明该值的存储方式。这可以直接通过支持字段,也可以通过集合中的查找,甚至可以在幕后将其外包给某种数据提供者。
所有这些都是封装的另一个方面。它屏蔽了外部世界价值的内部表征。
使用它的任何人都清楚该方法的作用:它返回下一个ID。如何确定此ID对调用者没用,他不关心它是作为特定字段保存还是需要在某处查找。
您检索一个值。调用者不关心如何存储它,他只是想要值。 getNextId()
是可接受的名称。
很难找到一个直截了当的官方指南,但我认为它有点是Java naming conventions和JavaBean conventions的组合。
更具体地说:
方法
方法应该是动词,在第一个字母小写的大小写混合的情况下,每个内部单词的首字母大写。
run();
runFast();
getBackground();
和
如果bean具有遵循这些模式的访问器方法
,则bean定义类型为T的属性p吸气剂
public T getP()
它没有指定这是否应该专门映射到一个支持字段,它只是确定它应该如何构造。通过命名方法nextID()
,我发现了两个问题:
我意识到你不应该仅从一个库中获取指南并在下一个库中应用它,但我不能说我到目前为止已经看到它做了不同的事情并且使用获得 - 前缀。