【问题标题】:Java coding convention about static method关于静态方法的 Java 编码约定
【发布时间】:2011-09-23 14:25:15
【问题描述】:

这是一个很简单的问题,但我觉得有点争议。

当我编写 Java 类时,我使用以下顺序。

class Foo {

    // static fields
    // instance fields
    // constructors
    // methods (non-static and static methods are mixed but sorted based on their functionalities)
}

我读过一篇文章说:
(来自http://code.google.com/webtoolkit/makinggwtbetter.html#codestyle

Java 类型应具有以下成员顺序:

嵌套类型(混合内部类和静态类是可以的)
静态字段
静态初始化器
静态方法
实例字段
实例初始化器
构造函数
实例方法

如果我按照文章,上面的顺序应该是

class Foo {

    // static fields
    // static methods
    // instance fields
    // constructors
    // instance methods
}

在后者的情况下,我觉得在构造函数之前有一些方法很不舒服。 哪一个是更广泛使用的约定?

【问题讨论】:

    标签: java coding-style convention


    【解决方案1】:

    我相信 Sun(现在是 Oracle)的 Java 编码标准得到了更广泛的应用。这也是你目前正在使用的。

    来自Code Conventions for the Java TM Programming Language

    3.1.3 类和接口声明

    下表描述了类或接口声明的各个部分,按照它们的顺序 应该出现。

    1. 类/接口文档注释 (/*.../)
    2. classinterface声明
    3. 如有必要,类/接口实现注释 (/.../)
    4. 类 (static) 变量
    5. 实例变量
    6. 构造函数
    7. 方法

    【讨论】:

    • 嗯,我明白了。我想我正在使用标准。 Google 的一些编码风格让我很困惑,尤其是 sdk 中的 Android 示例。
    • 静态方法和方法怎么样?
    • 如果没有具体说明静态方法。如果它们是公共的,我通常将它们放在实例变量之上。当它们是工厂方法时,对我来说更是如此。我将尝试找到对标准约定的更完整描述。
    【解决方案2】:

    我个人使用选项 2(实例元素和构造之前的静态字段和方法)。对我来说,这在扫描文件时很有意义,因为从一个类的用户那里,我可以在不需要实例的情况下访问静态的东西。因此很高兴在构造函数之前看到它们,因为在使用静态东西时我不关心构造函数。

    【讨论】:

    • 反驳是 99% 的时间你都在使用实例,所以让静态类和内部类的东西在底部会更好
    • @Enerccio 我不确定我是否同意你的说法。我发现很多时候类要么是全状态实用程序,要么是所有实例方法类,或者当混合使用时,静态方法往往是入口点(如工厂方法)。所以我建议,当混合使用时,您通常从静态方法开始,然后在拥有实例后使用实例方法。
    • 还有使用静态方法进行优化
    【解决方案3】:

    仅作记录,这是来自您链接的 GWT 文章:

    我们承认存在许多出色的方法。我们只是想选择一个至少在某种程度上符合 Sun 的 Java 编码约定的...

    所以他们使用的风格

    1. 建议用于 GWT,不用于一般用途
    2. 有些偏离标准约定
    3. 被公认为众多优秀标准之一

    所以我会说,如果没有理由不坚持当前的约定,为什么要改变它们?

    【讨论】:

      【解决方案4】:

      Java Code Conventions 提出以下建议(这基本上是你已经做的):

      • 类(静态)变量:首先是公共类变量,然后是受保护的,然后是包级别(无访问修饰符),然后是私有的
      • 实例变量:首先是公共的,然后是受保护的,然后是包级别(无访问修饰符),然后是私有的
      • 构造函数
      • 方法:这些方法应按功能分组,而不是按范围或可访问性分组。例如,私有类方法可以位于两个公共实例方法之间。目标是让阅读和理解代码更容易。

      【讨论】:

        【解决方案5】:

        我不知道,但为了它的价值,我做你做的事。上面的构造函数,下面按功能分组的方法(不考虑静态性)。静态方法倾向于分组。

        我打算让您使用静态工厂方法而不是构造函数是个例外——如果是这样,它们在构造函数之前,并且 ctor 是私有的/受保护的。

        【讨论】:

          【解决方案6】:

          当然,这都是一个偏好问题......

          您的约定更符合 Javadoc 中的默认顺序(即静态和非静态方法混合在一起)。这也是我通常的做法。

          然而,内部类通常被放置在类的底部,因为它们通常是“辅助”或“辅助”类,将它们放在外部的主要部分之前似乎很奇怪类。

          【讨论】:

          • 是的,没错。我还将内部类放在类的底部。
          【解决方案7】:

          我将静态初始化程序和方法放在构造函数之前,所以我想我正在关注您的引用。

          为什么不舒服?这似乎是一件小事。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-03-02
            • 1970-01-01
            • 2011-04-28
            • 2019-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多