具体についてのクラスはインスタンスと同じもの? - 超ウィザード級ハッカーのたのしみ
クラスって何なのだろうと疑問に思い始めた。
さて、Javaにはjava.lang.Classクラスという変なクラスがある。Classクラスのオブジェクトはクラスそのものではないみたい。
面白いのは、ClassクラスのClassオブジェクトもあることだ。
Class<?> class2 = Class.class;
<?>
でなしに、<Class>
と明記することもできる。
Class<Class> class3 = Class.class; ^^^^^
そうすると<Class>
がWarningとなる。何のクラスのClassクラスか分からないからだ。
しかし、
Class<Class<?>> class4 = Class.class; Class<Class<?>> class5 = Class<?>.class; Class<Class<?>> class6 = Class<Class>.class;
これらはコンパイルエラーになってしまう。
だから何という話だけれども、自己言及はパラドックスを伴うこともあるので、Javaの言語仕様はパラドックスでもなんでもないが、表現しきれないという事実がちょっと面白いなと思った。