1. ホーム
  2. java

[解決済み】インターフェイスメソッドの最終引数 - ポイントは何ですか?

2022-04-12 14:09:16

質問

Javaでは final の引数をインターフェイスメソッドで使用し、実装クラスではそれに従わない、など。

public interface Foo {
    public void foo(int bar, final int baz);
}

public class FooImpl implements Foo {

    @Override
    public void foo(final int bar, int baz) {
        ...
    }
}

上記の例では barbaz は、その逆の final の定義をクラス VS インターフェースで行います。

同じように final の制限は、あるクラスメソッドが別のクラスメソッドを拡張する場合にも適用されます。 abstract を使用するかどうか。

一方 final はクラスメソッドの内部で実用的な価値を持ちますが、その一方で final をインターフェイスメソッドのパラメータに使用することはできますか?

どのように解決するのですか?

意味がないような気がするのですが。によると Java言語仕様書4.12.4 :

変数をfinalと宣言することで その値を示す有用な文書として は変更されないので、それを回避するのに役立ちます。 プログラミングのエラーになります。

ただし final モディファイアをメソッドパラメータに指定することは シグネチャのマッチングのルール オーバーライドされたメソッドを呼び出すと、呼び出し側には何の影響もなく、実装の本体内だけに影響します。また、Robinのコメントで指摘されているように final 修飾子は、生成されるバイトコードに影響を与えません。(これは、他の final .)