java中类名的词序

java中类名的词序,java,naming-conventions,Java,Naming Conventions,我有一个关于Java中命名约定的快速问题。我读了一些指南,但没有一个能回答我的具体问题 我应该用什么语序 例如,我有一个抽象类: abstract class Requirement 如果我想生孩子,我怎么给他们取名字 像这样: class RequirementOnlyPlayer extends Requirement class RequirementOnlyConsole extends Requirement class RequirementArgumentCount extend

我有一个关于Java中命名约定的快速问题。我读了一些指南,但没有一个能回答我的具体问题

我应该用什么语序

例如,我有一个抽象类:

abstract class Requirement
如果我想生孩子,我怎么给他们取名字

像这样:

class RequirementOnlyPlayer extends Requirement
class RequirementOnlyConsole extends Requirement
class RequirementArgumentCount extends Requirement
或者像这样:

class OnlyPlayerRequirement extends Requirement
class OnlyConsoleRequirement extends Requirement
class ArgumentCountRequirement extends Requirement
还是以其他方式?我想这是我的第一个例子,但我不确定

这就是如何使用这些要求:

addRequirement(new RequirementOnlyPlayer());
addRequirement(new RequirementArgumentCount(3));

任何帮助或反馈都将不胜感激!很抱歉,如果这是一个有点“nooby”的问题,我对Java和编程都很有经验,但出于某种原因,我对这一点还不是很确定。

删除“only”word和ArgumentCountRequirement看起来都不错,但如果我在你的位置上,我会选择Requirement作为后缀。因此,我投票支持
PlayerRequirement
ConsoleRequirement
ArgumentCountRequirement
,因为这有一定的道理。

我建议你将你的类命名为

OnlyPlayerRequirement
OnlyConsoleRequirement
CountArgumentRequirement

这是因为Java中的类被认为具有一些真实世界的链接和一些真实世界的关系。这些名字并不是按照预先确定的顺序或按照某种规则命名的,而是简单地基于现实世界的存在。请参阅,OnlyplayerRequirement建议只需要player,其他两个也需要player…

如果查看标准Java库,通常会发现父类作为后缀,或者子类将具有完全不同的名称。一些例子:

// in java.io - often suffixes:
abstract class InputStream
class FilterInputStream extends InputStream
class BufferedInputStream extends FilterInputStream
class ByteArrayInputStream extends InputStream

// in javax.swing - often completely different names:
abstract class JComponent
class JLabel extends JComponent
abstract class JTextComponent extends JComponent
class JEditorPane extends JTextComponent
然而,所有这些例子的共同点是,它们在通俗易懂的英语中是有意义的。我认为,我们经常发现父类的名称作为子类的后缀的原因很简单,因为在英语中形容词放在它们限定的名词之前(子类通常采用父类的名称,并添加一个形容词来解释它们的特殊性)。如果你用法语这样的语言命名你的类,你通常会想做相反的事情


最后,我要说的是,你应该选择听起来像正确的英语,我认为这将是你的第二个建议。但是我也会考虑完全放弃“需求”部分——毕竟,代码>控制台< /代码>(或者<代码>控制台只有< /代码>?)可能已经听起来像是<代码>要求>代码>,就像<代码>时间戳<代码>显然是一种<代码>日期<代码>。然而,如果它应该有一些真实世界的链接/关系,那么它不应该是
ArgumentCountRequirement
吗?为什么不
CountArgumentRequirement
——要计算参数,请参见count---the---参数,所以CountArgumentRequirement!将AbstractRequirement视为抽象类的名称是一种常见但不通用的约定。