ちょっとしたfinalの使い方

Javaで割とどうでもいい問題だけど、コンストラクタやsetterをどう書くかという問題がある。

以下のようなコードがあるとして、

public class foo {

    private String name = null;

    public void setName(String name) {
        this.name = name;
    }
}

こういう書き方が一般的だと思うけど、これにはいくつか問題がある。

  • thisを付け忘れるとフィールドにセットできない
    public void setName(String name) {
        name = name
    }
  • メソッドの引数名を間違えてもそれなりに動く(まあ、まともなIDEを使ってるなら問題にはならないだろうけど。)
    public void setName(String neme) {
        this.name = name
    }
  • やや見にくい。そもそもthisを使うのは個人的にイヤ

以上の問題に対して、引数にprefixをつけるというやり方がある。

    public void setName(String setName) {
        name = setName
    }

こんな感じ。ちょっとダサイけど。

しかし、prefix以外にfinalを使うやり方があるようだ。

    public void setName(final String name) {
        this.name = name
    }

これだと、thisを付け忘れてもfinal変数に2回参照を割り当てることになり、コンパイルエラー。見た目もなかなかカッコイイ。やや冗長な気もするけど。

やっぱり誰が見ても直感的に分かるという点でprefix付けるのが一番いいのかとも思うけど、finalを使うのもなかなか興味深い。


ホントどうでもいいことだな。。。