web-dev-qa-db-ja.com

プライベートメソッドをfinalにしますか?

プライベートメソッドをfinalにすることは有益ですか?パフォーマンスは向上しますか?

プライベートメソッドはオーバーライドできないため、「プライベートファイナル」はあまり意味がないと思います。したがって、メソッド検索はfinalを使用する場合と同じように効率的でなければなりません。

また、プライベートヘルパーメソッドを静的にすることをお勧めします(可能な場合)?

何を使うのが最善ですか?

  private Result doSomething()
  private final Result doSomething()
  private static Result doSomething()
  private static final Result doSomething()
48
deamon

メソッドにfinalを追加しても、Sun HotSpotのパフォーマンスは向上しません。 finalを追加できる場合、HotSpotはメソッドがオーバーライドされないことに気づき、同じように扱います。

Java privateメソッドは仮想ではありません。サブクラスにアクセスできるネストされたクラスを使用していても、それらをオーバーライドすることはできません。たとえば、プライベートメソッドを呼び出すためのメソッドなどのメソッド非プライベートで使用されるものとは異なります。プライベートメソッドにfinalを追加しても、オッズはありません。

いつものように、この種のマイクロ最適化は時間を費やす価値はありません。

66

private static Result doSomething()、このメソッドがインスタンス変数を使用していない場合。いずれの場合も、アクセサはプライベートなので、それらを最終的にすることは意味がありません。

21
Binoj Antony

いいえ、それはしません。プライベートメソッドは継承されません。したがって、それらを最終的なものにすることは、議論の余地があります。また、パフォーマンスのためにメソッドをfinalにしないでください。 JVMはそれよりも賢いです。この種の最適化はあまり役に立ちません。セマンティクスと設計に基づいて、最終的なもの、プライベートなもの、プライベートなもの、保護されたもの、プライベートなものなどにする必要があります。

8
Chandra Patni

プライベートメソッドをfinalとしてマークしても何も変更されませんが、ジュニア開発者がコードを見るのを混乱させる可能性があります。単純にする。

7

IBM開発者は動作します: Javaの理論と実践:それが最終的な答えですか? 記事は古くからありますが、Javaでのfinalキーワードの使用については良いものです。

4
Doug Porter