我有一个关于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和编程总体上非常有经验,但出于某种原因,我仍然不太确定。
答案 0 :(得分:6)
如果查看标准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
然而,所有这些例子的共同之处在于它们用简单的英语才有意义。我认为我们经常找到父类的名称作为子类的后缀的原因仅仅是因为形容词被放在他们用英语限定的名词之前(并且子类通常采用父类的名称,并且添加一个形容词来解释它们的特殊性)。如果你用法语这样的语言命名你的课程,你通常会想要做相反的事情!
在一天结束时,我会说你应该听听正确的英语,我认为这将是你的第二个主张。但我也会考虑完全删除“需求”部分 - 毕竟OnlyConsole
(或ConsoleOnly
?)可能听起来像是Requirement
,就像Timestamp
一样很明显是一种Date
。
答案 1 :(得分:3)
我建议你将你的课程命名为
OnlyPlayerRequirement
OnlyConsoleRequirement
CountArgumentRequirement
这是建议的,因为Java中的类被认为具有一些真实世界的链接和一些现实世界的关系。这些名称不是按照预先确定的顺序或按照某些规则而是仅仅基于现实世界的存在。请参阅,OnlyplayerRequirement建议只需要播放器,等等其他两个播放器......
答案 2 :(得分:1)
删除“仅”字样,但两者看起来都不错,但如果我在你的位置,我会将要求作为后缀。所以我的投票是PlayerRequirement
ConsoleRequirement
和ArgumentCountRequirement
因为它有道理。