質問: String.class; とすれば、classクラスのインスタンスが得られるというのもよくわかりません。 メソッドであれば返り値がそのインスタンスなんだろうと思いますが、フィールドでどうしてインスタンスが得られるのでしょうか。 また、isArray()メソッドについて、 この Class オブジェクトが配列クラスを表すかどうかを判定します とリファレンスには書いているのですが、これってどういう意味なんでしょうか。 配列変数をフィールドに持つという意味ではないのですよね? ご存知の方いらっしゃいましたら、回答お願いします。
回答: > > Objectクラスを見ていても、classというフィールドが見当たりません。 > > > 元記事がフィールドと書いているのはわかりやすさのためなのかもしれませんが、 `.class` はJava言語仕様によればリテラルであり、`10L`と書くとlongにしてくれるとかそういうことに近い感じですね。 > > 15.8.2. Class Literals > > > A class literal is an expression consisting of the name of a class, interface, array, or primitive type, or the pseudo-type void, followed by a '.' and the token class. > > > isArray()メソッドについては、配列かどうかがわかるのでどういう意味と言われてもそのままなんですけど、以下の様なコードであればわかるでしょうか。 ``` import java.lang.reflect.Array; public class IsArrayUsage { public static void main(String[] args){ Object o = new int[]{ 1, 2 }; printValue(o); o = "Hello world"; printValue(o); } private static void printValue(Object o){ // Objectが何だか知らないが、isArray()を使うと配列かどうか判断できる。 if(o.getClass().isArray()){ for(int i = 0; i < Array.getLength(o); i++){ System.out.println(Array.get(o,i)); } }else{ System.out.println(o); } } } ``` (一応言っておくと訳もなくObjectに入れるのはよくないコードです。)