コンストラクタとプロパティの最後

nimo23:

私は、最終的なプロパティやコンストラクタを持っています:

public abstract class AbstractTest<T> {

    protected final T test;

    // no need for final, as property is already declared as final?
    protected AbstractTest(final T test) {
        this.test = test;
    }

}

私は入れなければならないfinalの両方、プロパティおよびコンストラクタにまたはこれは去ると同じであるfinalコンストラクタから?

ジョンKugelman:
protected AbstractTest(final T test) {
    this.test = test;
}

関数のパラメータをマークすると、final関数内の変数を変更するのを防ぐことができます。これは、すべての発信者には影響しません。また、クラスの他の部分に影響を与えません。外部のコードは、1つの方法または他のを気にしないだろう。それは、関数の実装内部でのみ関連です。

protected AbstractTest(final T test) {
    this.test = test;
    test = null;       // Illegal if the parameter is final, legal otherwise.
}

あなたが最終的かどうかのパラメータをマークしたい場合、それはあなた次第です。

あなたが迷っている場合かどうかthis.test、最終的な手段であるtestパラメータは、最終でなければなりません:なし一つは、他とは関係ありません。あなたは他の最終、または1つの最終なくどちらも最終的に両方の変数を、マークすることができます。

あなたはまだ何をすべきかわからない場合、私のアドバイスは次のようになります。最終的なパラメータをマークしません。これは、ほぼゼロの利益と余分なタイピングです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=225131&siteId=1