14

非常に単純な質問ですが、少し物議をかもしていると思います。

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
}

後者の場合、コンストラクターの前にいくつかのメソッドがあると不快に感じます。どちらがより広く使用されている規則ですか?

4

7 に答える 7

24

Sun(現在はOracle)のJavaコーディング標準がより広く使用されていると思います。これも現在使用しているものです。

Java TMプログラミング言語のコード規約から:

3.1.3クラスとインターフェースの宣言

次の表は、クラスまたはインターフェイス宣言の各部分を、表示される順序で説明しています。

  1. クラス/インターフェースのドキュメントコメント(/ * ... /)
  2. classまたはinterfaceステートメント
  3. クラス/インターフェース実装コメント(/ ... /)、必要に応じて
  4. クラス(static)変数
  5. インスタンス変数
  6. コンストラクター
  7. メソッド
于 2011-09-23T14:31:54.887 に答える
5

個人的にはオプション2(インスタンス要素と構成の前の静的フィールドとメソッド)を使用します。クラスのユーザーから、インスタンスを必要とせずに静的なものにアクセスできるため、これはファイルをスキャンするときに意味があります。したがって、静的なものを使用するときはコンストラクターを気にしないので、コンストラクターの前にそれらを確認するのは良いことです。

于 2011-09-23T14:36:14.530 に答える
3

念のため、これはリンクしたGWTの記事からのものです。

私たちは、そこにたくさんの素晴らしいアプローチが存在することを認めます。私たちは単に、SunのJavaコーディング規則と少なくともある程度一致するものを選択しようとしています...

だから彼らが使うスタイル

  1. 一般的な使用ではなくGWTに提案されています
  2. 標準の規則から多少逸脱している
  3. 多くの優れた基準の1つとして認められています

それで、あなたの現在の慣習に固執しない理由がないのなら、なぜそれらを変えるのでしょうか?

于 2011-09-23T14:38:11.690 に答える
2

Javaコード規約は、次のことを提案しています(これは基本的にすでに行っていることです)。

  • クラス(静的)変数:最初にパブリッククラス変数、次に保護された、次にパッケージレベル(アクセス修飾子なし)、次にプライベート
  • インスタンス変数:最初にパブリック、次に保護、次にパッケージレベル(アクセス修飾子なし)、次にプライベート
  • コンストラクター
  • メソッド:これらのメソッドは、スコープやアクセシビリティではなく、機能ごとにグループ化する必要があります。たとえば、プライベートクラスメソッドを2つのパブリックインスタンスメソッドの間に置くことができます。目標は、コードの読み取りと理解を容易にすることです。
于 2011-09-23T14:35:55.153 に答える
0

わかりませんが、その価値のために、私はあなたがすることをします。上のコンストラクター、下の機能(静的性に関係なく)ごとにグループ化されたメソッド。静的メソッドはグループ化する傾向があります。

例外は、コンストラクターの代わりに使用することを意図している静的ファクトリメソッドです。その場合、コンストラクターの前にあり、ctorはプライベート/保護されています。

于 2011-09-23T14:30:09.897 に答える
0

もちろん、それはすべて好みの問題です...

規則は、Javadocのデフォルトの順序(つまり、静的メソッドと非静的メソッドが混在している)とより一貫性があります。これも私が普段やっていることです。

ただし、内部クラスは「セカンダリ」クラスまたは「ヘルパー」クラスであることが多いため、クラスの最下部に配置されることが多く、外部クラスのメインミートの前に配置するのは奇妙に思えます。

于 2011-09-23T14:35:20.817 に答える
0

静的初期化子とメソッドをコンストラクターの前に置いているので、あなたの引用に従っていると思います。

なぜ不快感?小さなことのようです。

于 2011-09-23T14:35:37.137 に答える