ちょっとした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を使うのもなかなか興味深い。
ホントどうでもいいことだな。。。