or1ko's diary

日々を書きます

メソッドにstaticをつけるか否か

僕は積極的につける。

staticがついてると、若干安心できるから。少なくとも、インスタンスのフィールド変数に変更が加えられないことがわかる。non-staticなメソッドは、クラス変数にも、インスタンス変数にもアクセスできる。なんで、インスタンス変数を使ってないメソッドを作っていることに気づくと、積極的にstaticをつけてしまう。

ついでに、そのクラスにふさわしいかどうかも考える。局所的に使うんだったら、そのクラスでprivate staticにして、そうじゃないなら、別のクラスに移動させる。それほどかずがなくて、そのクラスを使うのに便利なメソッドは、移動させずpublicにするかも。適宜、適当にする。

ただ、一方で意識的につけない時もある。

staticはやっぱり、一般的な受けが悪い気がする。staticで、よく見るのはstatic final。staticメソッドは一部の特殊なクラスがたくさんもってたり、シングルトンだったり、ちょっとしたユーティリティ的なメソッドだったりする。staticブロックやstatic classなんてのは、ほとんど見ない。staticフィールド変数を見ると、がくがくする。

なんで、メソッドにstaticをつけないことで、異質に感じられるのを避けようとする。

どちらを選ぶかは、環境次第だわ。