以Java标准库为例,为什么Object.equals
不是Object.equal?为什么Object.clone
使用单数,而不是Object.clones?
为什么我看到几乎所有人在阅读和设置对象的属性时使用getXXX
和setXXX
,而不是获取或设置?
答案 0 :(得分:9)
这些方法名称是动词,而不是名词。 equals
是动词“相等”的第三人称形式(可能是疑问句 - 在语言中支持方法名称中的非字母数字字符,通常称为equals?
),而clone
是动词“克隆”的第二人命令形式(你命令对象:“克隆自己!”)。
通常,您使用疑问谓词来查询有关对象状态相对于另一个(equals
,contains
,hasXXX
...)的信息,以及“动作”的命令式动词“方法(要求对象执行某些任务的方法,例如clone
,add
,show
......通常这些方法不返回任何内容),以及方法的名词查询有关对象状态的信息,而不引用外部任何内容(例如length
,intValue
,keys
)。请注意,这些名词可以是单数或复数,具体取决于方法返回的内容:单数形式的东西只能是单数(length
),复数形式可以返回列表/地图/其他容器({{1} })。
Getters是一种特殊情况,您可以使用动作动词(get)将这些方法“标记”为getter,并使用set的setter进行对称。
此外,getter / setter是C ++和Java中缺少属性的一种解决方法。在没有这种弱点的语言中,它们不存在:您使用属性,而那些是名词。