51

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

プライベートメソッドはオーバーライドできないため、「プライベートファイナル」はあまり意味がないと思います。したがって、メソッドルックアップはfinalを使用する場合と同様に効率的である必要があります。

そして、プライベートヘルパーメソッドを静的にする方が良いでしょうか(可能な場合)?

何を使用するのが最適ですか?

  private Result doSomething()
  private final Result doSomething()
  private static Result doSomething()
  private static final Result doSomething()
4

6 に答える 6

68

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

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

相変わらず、これらの種類のマイクロ最適化は時間を費やす価値がありません。

于 2009-12-31T12:09:07.737 に答える
21

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

于 2009-12-31T08:03:25.227 に答える
8

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

于 2009-12-31T08:02:22.983 に答える
7

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

于 2009-12-31T08:04:04.473 に答える
4

IBM Developer Works:Javaの理論と実践:それがあなたの最終的な答えですか?記事は古くからありますがfinal、Javaでのキーワードの使用については優れています。

于 2009-12-31T08:09:39.907 に答える
-1

メソッドをfinalにすることで、メソッドをオーバーライドすることはできません。プライベートメソッドはクラスの外部からアクセスできないため。メソッドを最終的かつプライベートにする意味はありません。性能に影響を与える可能性があります。

于 2009-12-31T08:26:17.893 に答える