委托布尔存在性属性的getter的尴尬命名约定

时间:2013-06-06 04:29:02

标签: java properties getter-setter jsr

请参阅Naming conventions for java methods that return boolean(No question mark)

对我不问的内容进行比较。

我的问题涉及从嵌入在容器对象中的委托派生的属性。

虽然所有属性的setter都是以“set”(例如setValueRequired(blah))轻松方便地加上前缀,但是有各种类型的布尔属性,每个布尔属性的getter通常被命名为{verb} {PropertyName}。如,

  • 最常见的是存在主义,按照惯例以“是”为前缀。例如的isEmpty()。
  • 所有格属性,以“has”为前缀,例如hasValue的()。
  • 肯定必要性,以“要求”为前缀,例如: requiresResize(),provideResize()。

到目前为止,大多数属性获取者都以某种方式转换为存在属性。例如isRequireResize,isValued等。因此,我的问题仅涉及表达存在性布尔属性(委托类)。

我们假设容器类是Printer,它包含类Queue。

class Queue {
  boolean empty, resettable, resizable;
}

class Printer {
  Queue queue;
}

那么打印机应如何为Queue命名其委托属性?因为按照英语理解惯例,以下内容很尴尬,因为它们听起来像是在问一个问题,而不是肯定它的地位。

  • isQueueEmpty()
  • isQueueResettable()
  • isQueueResizable()

布尔属性应该是肯定的,听起来不像问一个问题。因此,对于可理解的英语,他们应该

  • queueIsEmpty()
  • queueIsResettable()
  • queueIsResizable()

或者,也可以是

  • isEmptyQueue()
  • isResettableQueue()
  • isResizableQueue()

但是,自动委托方法代码生成器总是生成名称isQueueEmpty(),isQueueResettable(),isQueueResizable()。

当放入if

时,这很尴尬
if (isQueueResettable() && !isQueueEmpty()) resetQueue();

因为这听起来更好

if (isResizableQueue() && !isEmptyQueue()) resetQueue();


我的问题实际上

  1. 如果JSR推荐属性getter的命名约定?它是什么?当然必须有,否则所有代码生成器都不会出现含糊不清的约定?

  2. 如果有的话,JSR是否建议使用委托的布尔存在属性getter?

  3. 如果不是JSR,至少在Apache,JBoss,Eclipse等中有某种形式的RFC?

  4. 您认为我推荐的惯例是否比创建提问者的代码生成器更好?

2 个答案:

答案 0 :(得分:0)

我对JSR了解不多,但我只是想了解一下。

你说isResettableQueue()听起来比isQueueResettable听起来要好(可能还有很多其他人)。

当您将isResettableQueue()分解为is - Resettable - Queue时,您正在谈论的主要对象(事物)最后会进入上下文(在这种情况Queue)。

但是当你将isQueueResettable()分解为is - Queue - Resettable时,你所谈论的主要对象(事物)会在早期阶段进入上下文(至少不是最后一次。

所以你可以告诉Ok now I am talking about Queue for which I am checking if it is empty

答案 1 :(得分:0)

方法名称应以动词开头,因此不应使用queueIsEmpty

我找不到任何关于提到这个特定情况的命名约定的文章,但最自然的选择仍然是isQueueEmptyisEmptyQueue会引用this而不是this.queue。它将返回“此对象是否为空队列”而不是“此对象的队列为空”。

Oracle还在isQueueEmpty表单上使用方法名称。

以下是AbstractButtonJFrameJTable及其超类中定义的相关方法名称:

isAlwaysOnTopSupportedisBackgroundSetisBorderPaintedisCellEditableisCellSelectedisColumnSelectedisContentAreaFilledisCursorSetisFocusPaintedisFocusTraversalPolicySetisFontSetisForegroundSetisMaximumSizeSetisMinimumSizeSetisOptimizedDrawingEnabledisPreferredSizeSet {{ 1}},isRequestFocusEnabledisRolloverEnabledisRootPaneCheckingEnabled