Java抽象类命名


9

例:

您为Ajax操作创建一个抽象类。不同的Ajax操作都将扩展此类。

问题:

  1. 您将类命名为AjaxAction还是AbstractAjaxAction吗?
  2. 创建子类时,是否给它们命名:
    • 行动
    • AjaxAction
    • 只要给他们起名字就好

我一直找不到“正式”约定。我看不到子类中需要 “抽象”前缀或任何必需的命名约定。(可能仍然适合,具体取决于。)

有正式的公约吗?你能把我链接到它吗?您对此主题有何看法?

Answers:


16

如果可能,我会尽量保留实现细节,包括抽象类或接口的前缀/后缀。

寻找有关命名的指导/灵感的地方是Java API。我想不出任何使用前缀的部分(一个巨大的例外是Collections API,它大量使用Abstract前缀)。以下搜索将产生一些非常好的示例:

可以在download.oracle.com/javase/6上找到“公共抽象类”

您会发现抽象类被命名为abstract,而具体子类被命名为更具体。例如,抽象类Reader具有具体的子类BufferedReaderStringReaderInputStreamReader等。

由于您的具体子类只是抽象类的更具体版本,因此有意揭示以相同方式选择名称。在您的示例中,我将命名抽象类,AjaxAction并将其用于具体子类(SpecificAjaxAction)的名称中。


12

选择某物,并保持一致。无论您使用后缀Base来表示预期的基类,还是使用前缀Abstract,都应保持一致。

关于这种事情,有和程序员一样多的意见。我认为,对于项目(或开发组或任何其他项目)内部的命名一致性而言,其价值比任何特定的命名方案都重要。


4

我将AjaxActionBase使用“ Action”或“ AjaxAction” 来命名抽象类和后缀子类,无论哪种形式,对于我需要创建的动作而言,其可读性都更高。


0

我更倾向于暗示一个类的名称是抽象的,其原因很简单但很重要:

  • 最好围绕接口而不是抽象类构建API。
  • 您想使用简单的名称(例如“ Action”)来命名您的界面。例如,参见Java Collections API中的List或Map-所有这些都是接口。

因此,我通常将顶级抽象类称为AbstractAction或BaseAction。除非有非常特殊的需求,否则我通常不会公开这些内容,以便使代码用户直接使用该接口。除非您非常希望别人对它们进行扩展,否则抽象基类通常应该是实现细节而不是API的功能。

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.