web-dev-qa-db-ja.com

Javaメソッドの順序付け規則はありますか?

コースワークとして提出するパッケージの一部である大規模なクラス(40個程度のメソッド)があります。現在、これらのメソッドはユーティリティpublic/privateなどの点でかなり乱雑です。私は賢明な方法でそれらを注文したいと思います。これを行う標準的な方法はありますか?例えば。通常、フィールドはメソッドの前にリストされ、コンストラクターは他のメソッドの前にリストされ、ゲッター/セッターは最後にリストされます。残りの方法はどうですか?

145
fredley

いくつかの規約では、最初にすべてのパブリックメソッドをリストし、次にすべてのプライベートメソッドをリストします。つまり、意味がわかれば、インターフェースが含まれていなくても、APIを実装から簡単に分離できます。

別のアイデアは、関連するメソッドをグループ化することです-これにより、既存の大きなクラスをいくつかのより小さく、よりターゲットを絞ったものに分割できる継ぎ目を見つけやすくなります。

120
Jon Skeet
  1. クラス(静的)変数:最初にパブリッククラス変数、次に保護クラス変数、次にプライベートクラス変数。

  2. インスタンス変数:最初にパブリック、次に保護、次にプライベート。

  3. コンストラクター

  4. メソッド:これらのメソッドは、スコープやアクセシビリティではなく機能ごとにグループ化する必要があります。たとえば、プライベートクラスメソッドは、2つのパブリックインスタンスメソッドの間に配置できます。目標は、コードの読み取りと理解を容易にすることです。

ソース: http://www.Oracle.com/technetwork/Java/codeconventions-141855.html

106
Michael

"コード規約"へのより正確なリンク: "クラスとインターフェイスの宣言"

36

広く受け入れられている標準があるかどうかはわかりませんが、私自身の好みはそうです。

  • 最初にコンストラクター
  • 次に静的メソッド、メインメソッドがある場合、常に他の静的メソッドの前
  • 次に、非静的メソッド。通常は、メソッドの重要度の後に、それが呼び出すメソッドが続きます。これは、他のクラスメソッドを呼び出すパブリックメソッドが上に表示され、他のメソッドを呼び出さないプライベートメソッドが通常は下に表示されることを意味します
  • toStringequalshashcode nextなどの標準メソッド
  • ゲッターとセッターには、クラスの一番下に特別な場所が予約されています
14
Qwerky

単一のクラスの40個のメソッドは少し多くなります。

機能の一部を他のクラス(適切な名前のクラス)に移動するのは理にかなっていますか。そうすると、理解しやすくなります。

少ない場合は、自然な読み上げ順序でリストする方がはるかに簡単です。よくあるパラダイムは、beforeまたはafterのいずれかを、必要な順にリストすることです。

これは通常、main()が上または下になることを意味します。

私の「慣習」:インスタンスの前に静的、プライベートの前にパブリック、メソッドの前にコンストラクター、しかしメインメソッド(存在する場合)。

11
eljenso

また、Eclipseは、何らかの理由でクラスメンバーを混同した場合に、クラスメンバーをソートする可能性を提供します。

クラスファイルを開き、メインメニューの[ソース]に移動して[メンバーの並べ替え]を選択します。

ここから: Eclipseでのメソッドの並べ替え

2
Stephan Richter

Eclipseを使用していますか?もしそうなら、私はデフォルトのメンバーのソート順に従うことにします。なぜなら、それはあなたのコードを読む人にとって最も馴染みがありそうだからです(私のお気に入りのソート順ではありませんが)。

1
finnw