メソッド パラメータの Final キーワードの実用性は限られています。
プリミティブ型がメソッドパラメータとして使用されている場合、それをfinalとマークしても効果はありません。プリミティブ パラメーターは値によって渡されます。つまり、メソッド内で値に加えられた変更はメソッドの外部には反映されません。
非プリミティブ パラメーターの場合 (オブジェクト)、それらを「final」としてマークすると、メソッドがパラメータに新しい参照を再割り当てするのを防ぎます。ただし、オブジェクト自体は依然として変更できます。
次の例は、これらの制限を示しています。
public void changeParameter(Collection<Integer> c) { c = new ArrayList<>(); // Can't assign a new reference c.add(5); // Mutating the object is still possible }
c が Final とマークされていても、メソッドはc.
これらの制限にもかかわらず、パラメータを Final としてマークすることには重要な利点が 1 つあります。それは、メソッドが誤ってパラメータを別のオブジェクトに再割り当てするのを防ぐことです。これは、メソッドがパラメーターによって参照されるオブジェクトに依存している場合のエラーを防ぐのに役立ちます。
一般に、特別な理由がない限り、メソッド パラメーターを Final としてマークすることをお勧めします。読みやすさが向上し、偶発的なエラーが防止されます。ただし、非プリミティブ パラメーターと一緒に使用する場合は、final の制限に注意することが重要です。
1 つの重要なケースでは、パラメーターを Final とマークすることが不可欠です。このメソッドは、パラメーターによって参照されるオブジェクトが変更されないことを保証します。この保証は、オブジェクトが不変である場合、つまりその状態を変更できない場合に実現できます。例:
public void processImmutableObject(final ImmutableClass obj) { // obj's state will not change }
このシナリオでは、obj を Final にマークすることで、メソッドが誤ってオブジェクトを変更するのを防ぎます。
以上がJava ではメソッドのパラメータが「final」とマークされることがほとんどないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。