クラスリテラル

 Classオブジェクトの表し方として Hoge.class みたいな書き方がある、というのを今知りました。

public class ReflectTest {
	public static String getClassName ( Class theClass )
	{
		return theClass.getName();
	}
	public static void main(String[] args) {
		System.out.println( getClassName( ReflectTest.class ) );
	}
}

 こうすると「ReflectTest」って表示されるという感じ。

 JUnitソースコードを読んでいて

suite.addTestSuite( ListTest.class );

みたいなことが書いてあって、addTestSuiteはClass型の引数をとるメソッドで、「え、なんだよこの .class って」とか思っていたのですが、これはClassオブジェクトを表すクラスリテラルのことらしいのですね。なので ListTest.class なら、ListTestクラスをあらわすClassオブジェクトのことになるという訳です。

 リテラルってわかりにくい言葉だと思うのですけど、私は値の表し方だと解釈しています。たとえばクラスリテラルならば、それはClassオブジェクトの表し方であって、ListTest.class みたいに書くんだよ、という具合で。

 そんな訳でメモ。