0

请参阅返回布尔值的 java 方法的命名约定(无问号)

对我没有要求的内容进行比较。

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

尽管所有属性的设置器(无论类型)都可以轻松方便地以“set”为前缀(例如 setValueRequired(blah) ),但存在各种类型的布尔属性,每个属性的 getter 通常被命名为 {verb}{PropertyName}。例如,

  • 最常见的是存在主义,按照惯例以“is”为前缀。例如 isEmpty()。
  • 所有格属性,以“has”为前缀,例如 hasValue()。
  • 确认必要性,以“requires”为前缀,例如 requiresResize()、providesResize()。

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

假设容器类是 Printer,其中包含类 Queue。

class Queue {
  boolean empty, resettable, resizable;
}

class Printer {
  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 推荐属性获取器的命名约定?它是什么?当然必须有,否则不是所有的代码生成器都会在模棱两可的约定中一瘸一拐吗?

  2. 如果有,JSR 是否推荐了委托布尔存在属性获取器?

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

  4. 您不认为我推荐的约定比创建质疑获取器的代码生成器更好吗?

4

2 回答 2

0

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

我找不到任何有关提及这种特殊情况的命名约定的文章,但最自然的选择仍然是isQueueEmpty. isEmptyQueue将指代this而不是this.queue. 它会返回是否“这个对象是一个空队列”而不是“这个对象的队列是空的”。

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

以下是,中定义的相关方法名称AbstractButton,以及它们的超类:JFrameJTable

isAlwaysOnTopSupported, isBackgroundSet, isBorderPainted, isCellEditable, isCellSelected, isColumnSelected, isContentAreaFilled, isCursorSet, isFocusPainted, isFocusTraversalPolicySet, isFontSet, isForegroundSet, isMaximumSizeSet, isMinimumSizeSet, isOptimizedDrawingEnabled, isPreferredSizeSet isRequestFocusEnabled, isRolloverEnabled, isRootPaneCheckingEnabled,isRowSelected

于 2013-06-06T06:25:40.703 回答
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

于 2013-06-06T04:39:13.027 回答