抽象类命名约定


73

我们应该有一个团队编码标准,抽象类的名称带有前缀Abstract吗?例如

public abstract class AbstractB implements B {}

7
我敢打赌这个问题已经解决。这是非常主观的。不过,我投赞成票。
瑞安·斯图尔特

8
@bstick:不!接口是类型。命名他们是什么!
瑞安·斯图尔特

1
@Ryan Stewart我脸颊有些发白。
bstick12 2011年

1
@bstick:是的,有人会认真对待您的:p
Ryan Stewart

1
我不认为这是主观的
Paul McKenzie

Answers:


90

是的,实际上,如果您查看http://download.oracle.com/javase/6/docs/api/上的标准库的javadocs,您会发现左下框架中的类列表以使用您在问题中提到的命名约定来抽象类。

AbstractAction
AbstractAnnotationValueVisitor6
AbstractBorder
AbstractButton
AbstractCellEditor
AbstractCollection
AbstractColorChooserPanel
AbstractDocument
AbstractDocument.AttributeContext
AbstractDocument.Content
AbstractDocument.ElementEdit
AbstractElementVisitor6
AbstractExecutorService
AbstractInterruptibleChannel
AbstractLayoutCache
AbstractLayoutCache.NodeDimensions
AbstractList
AbstractListModel
AbstractMap
AbstractMap.SimpleEntry
AbstractMap.SimpleImmutableEntry
AbstractMarshallerImpl
AbstractMethodError
AbstractOwnableSynchronizer
AbstractPreferences
AbstractProcessor
AbstractQueue
AbstractQueuedLongSynchronizer
AbstractQueuedSynchronizer
AbstractScriptEngine
AbstractSelectableChannel
AbstractSelectionKey
AbstractSelector
AbstractSequentialList
AbstractSet
AbstractSpinnerModel
AbstractTableModel
AbstractTypeVisitor6
AbstractUndoableEdit
AbstractUnmarshallerImpl
AbstractWriter

选择其中任何一个,说第一个,然后检查其定义:AbstractAction。它的实现确实Action类似于您的约定。它的子类的命名,如:ClosedActionMaximizeAction等等。


3
反例:java.util.Calendar
KGhatak '16

@ Susam Pal-因此,没有实现接口的抽象类应以“ Abstract”开头!注意:Calander是抽象类
KGhatak '16

1
我不确定AbstractMethodError这里是否适用。
zero01alpha

12

通常,在团队环境中,任何一种标准都是一件好事。否则,团队成员可能会以只有他们能理解的方式来命名课程,然后您可能会混合使用人们不同的编码样式,这会引起混乱。


这正是我的想法。我更愿意用Abstract前缀命名它们,但最重要的是遵循团队/项目编码风格。
加博尔·西斯科斯(GáborCsikós)'16

5

对于可读性,听起来确实是个好主意。阅读代码时,您将立即知道类是什么。只要每个人都遵循标准,那就好。


3

将鼠标悬停在对象上时,现代IDE会弹出描述性文本。在这种情况下,前缀是多余的。


3
这需要javadocs,这对于团队进行编码风格的斗争来说是一件完全不重要的事情。
Paul McKenzie


2

与大多数此类问题一样:“取决于”。我喜欢一致性和清晰度,因此,如果它适合您和您的商店,那就太好了。但是,如果您有旧的Abstract类,则需要返回并将其重构为相同的命名约定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.