请参阅Naming conventions for java methods that return boolean(No question mark)
对我不问的内容进行比较。
我的问题涉及从嵌入在容器对象中的委托派生的属性。
虽然所有属性的setter都是以“set”(例如setValueRequired(blah))轻松方便地加上前缀,但是有各种类型的布尔属性,每个布尔属性的getter通常被命名为{verb} {PropertyName}。如,
到目前为止,大多数属性获取者都以某种方式转换为存在属性。例如isRequireResize,isValued等。因此,我的问题仅涉及表达存在性布尔属性(委托类)。
我们假设容器类是Printer,它包含类Queue。
class Queue {
boolean empty, resettable, resizable;
}
class Printer {
Queue queue;
}
那么打印机应如何为Queue命名其委托属性?因为按照英语理解惯例,以下内容很尴尬,因为它们听起来像是在问一个问题,而不是肯定它的地位。
布尔属性应该是肯定的,听起来不像问一个问题。因此,对于可理解的英语,他们应该
或者,也可以是
但是,自动委托方法代码生成器总是生成名称isQueueEmpty(),isQueueResettable(),isQueueResizable()。
当放入if
时,这很尴尬if (isQueueResettable() && !isQueueEmpty()) resetQueue();
因为这听起来更好
if (isResizableQueue() && !isEmptyQueue()) resetQueue();
〜
我的问题实际上
如果JSR推荐属性getter的命名约定?它是什么?当然必须有,否则所有代码生成器都不会出现含糊不清的约定?
如果有的话,JSR是否建议使用委托的布尔存在属性getter?
如果不是JSR,至少在Apache,JBoss,Eclipse等中有某种形式的RFC?
您认为我推荐的惯例是否比创建提问者的代码生成器更好?
答案 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
。
我找不到任何关于提到这个特定情况的命名约定的文章,但最自然的选择仍然是isQueueEmpty
。 isEmptyQueue
会引用this
而不是this.queue
。它将返回“此对象是否为空队列”而不是“此对象的队列为空”。
Oracle还在isQueueEmpty
表单上使用方法名称。
以下是AbstractButton
,JFrame
,JTable
及其超类中定义的相关方法名称:
isAlwaysOnTopSupported
,isBackgroundSet
,isBorderPainted
,isCellEditable
,isCellSelected
,isColumnSelected
,isContentAreaFilled
,isCursorSet
,isFocusPainted
,isFocusTraversalPolicySet
,isFontSet
,isForegroundSet
,isMaximumSizeSet
,isMinimumSizeSet
,isOptimizedDrawingEnabled
,isPreferredSizeSet
{{ 1}},isRequestFocusEnabled
,isRolloverEnabled
,isRootPaneCheckingEnabled