我看到一些项目(例如jsoup)正在使用这种新的getter/setter命名约定:
String name()
void name(String value)
使用新的getter/setter约定:
String getName()
void setName(String value)
每种命名惯例的优缺点是什么?您认为何时以及为什么应该优先选择其中一种?
我看到一些项目(例如jsoup)正在使用这种新的getter/setter命名约定:
String name()
void name(String value)
使用新的getter/setter约定:
String getName()
void setName(String value)
每种命名惯例的优缺点是什么?您认为何时以及为什么应该优先选择其中一种?
${object.name}
,它会被翻译成object.getName()
。如果你不遵循命名约定,这将失败(虽然有方法可以解决)。不讨论何时/是否使用getter/setter的情况下,通常最好坚持命名约定,因为这样会有更少的意外,特别是当你与预期按照约定命名的第三方库或框架集成时。除了可读性和API风格之外,没有别的需要考虑。
一些API可以接受这种风格,而有些则不行,比如Spring
的injections
和JSF
无法识别这种语法(它们明确要求属性使用get/set方法)。
当我处理的对象是不可变的时,我喜欢简单地使用name()
。也就是说,我永远不会改变name
字段的值。当我处理可变对象时,我会使用你提到的第二种约定,因为我认为它在可读性方面更加优越。
public final
,而不必写访问器。 - Joe K我总是更喜欢使用动词作为方法名,因此对于getter和setter也是有效的。
我只使用名词来表示变量。
遵循经典的JavaBean标准让我感觉更加舒适。 :)
如果库是低级别的,并且我想明确表明该组件不是JavaBean,我更喜欢使用较短的样式。
如果有疑问,我会使用JavaBean样式。
String s = obj.name();
这个语句读起来很好理解,但是obj.name("new name");
不像obj.setName("new name")
那样明显易懂。 - assylias