やっぱり便利に思えないStatic Import.

参考にさせていただきました.→static importってなんの役に立つんだろう?


あれこれ使いどころを考えてみたけど,イマイチ便利さが実感できんなぁ.ま,思ったことをツラツラと.

なんとなく便利かな?と思ったのが,Mix-in.例えば「オレ,POJOだけどTestCase」とか「オレ,POJOだけどAction」みたいなの.

import static junit.framework.Assert.*;

public class HogeTest {
  :
  public void testFoo() {
    :
    assert(xxxx);  // オレってTestCaseみたい.
  }

でも,Static Importしたメンバやメソッドって,外には公開されないのね.なんで,java.lang.System.*をStatic Importしたクラスが,SystemクラスのStaticなメンバやメソッド身に着けるわけではない.
それに「static限定」だし,RubyのMix-inとか明らかに趣が異なる.

import static java.lang.System.*;

public class Hage { ...

ってあったとして,Hage.out.println("Hello World");みたいなことは出来ない.
#逆コンパイルして種明かしをするとよく分かる.


一応,こんなMix-inは便利なのかな?

import static java.util.Arrays.sort;
import static java.util.Collections.sort;
  :
  public void xxx() {
     // オレが持ってるsort()はArraysとCollectionsの混ぜ合わせだ.
     sort(yyy);
  }

って,追っ手から逃げやすくなるだけのような...


案外,Checkstyleとかに「static import禁止」みたいなルールが追加されんじゃないだろか?
実装者の好みで使われても困るからなぁ.思い切って禁止って言っちゃいたいな.:-D


ps.
Tigerで追加された便利そうな新機能も,よ〜く素振りをしてから使わないと変態コードを大量生産してしまいそうだな.


(追記)ちょうど良い記事見っけ.
IBM - Japan via t-wadaの日記