2011-10-11 18 views
23

プライベートメソッドをプライベートクラスにしました。私はSafeVarargsアノテーションを使いたいと思います。しかし、私は静的メソッドまたは最終メソッドを持つ必要があります。プライベートメソッドも最終的に必要なのはなぜですか?これは冗長ではないですか?java @SafeVarargsプライベートメソッドをfinalにする必要があるのはなぜですか?

+0

私は、エラーメッセージが無効のjava.lang」ようなものになるだろう場合は、プライベート – gstackoverflow

答えて

15

これは重複しており、優れた点があります。

finalまたはstaticの要件の本当の理由は、メソッドをオーバーライドできないようにすることでした。したがって、サブクラスは@SafeVarargsアノテーションを定義上役に立たない方法でデータを改ざんできませんでしたメソッドの。

しかし、それは冗長ですが、多くの場合、プログラマーはすべてのメソッドを可能な限りプライベートにして、必要に応じてゆっくりクラスを開くようにします。このメソッドがプライベートスコープにあるときにfinalとマークされている場合、メソッドを開く必要がある場合でも、@SafeVarargsアノテーションはアクセスレベルの変更だけでそのまま使用できます。最終結果が意図的に削除された場合、コンパイル時エラーが発生しますが、既にそれがあった場合は、個人アクセスを削除した人(チームベースの環境では自分自身ではない可能性があります) "private"修飾子を削除すると、コードが突然コンパイルされなくなります。

+1

ため@safeが最終的な方法のために、静的メソッドのために、コンストラクタのための可変引数を使用し、Java-9以降ができ訂正理解していれば。 SafeVarargs注釈、インスタンスメソッド...最終的なものでもプライベートでもない」と言っているので、誰もが「プライベート」を取り除いた人には混乱はない。 –

4

この機能は、プロジェクトコイン2の一部であり、プライベートな方法でそれの呼び出し受け入れ@SafeVarargs

7月2017

を今後のJava 9につきになります。

Link.

関連する問題