- ベストアンサー
Classオブジェクトとは?
Classオブジェクトとは、どのようなものなのですか? Sun Microのホームページに”実行中の Java アプリケーションのクラスおよびインタフェースを表します。”と書いていますが、意味がわかりません。詳しく教えて下さい。お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラー処理は無しですが… 実行するクラス名とメソッド名(引数なしのもの)を引数にして実行してみてください。 <例> java java.util.Date getTime そのクラスのClassインスタンスを取得して、いろんな情報を取り出したり、メソッドを実行したりします。 ソース中にはDateクラスは出てきませんが、実際にインスタンスを生成してgetTime()メソッドを呼び出しています。 指定するクラスとメソッドは自分で作成したものでも大丈夫です。 コンストラクタとメソッドはpublicで引数なしにしてください…ちょっと手抜きなので(^^; public class ReflectSample { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { if (args.length <= 1) {return;} // 対象クラスのClassオブジェクトを取得 Class clazz = null; clazz = Class.forName(args[0]); // 持っているメソッドを表示 Method[] methods = clazz.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { System.out.println(methods[i]); } // 親クラスやインターフェース System.out.println(clazz.getSuperclass()); Class[] interfaces = clazz.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { System.out.println(interfaces[i]); } // 第二引数で指定された名前のメソッドを実行 Object target = clazz.newInstance(); // 引数なしコンストラクタでインスタンス作成 // 指定された名前を持つメソッド(引数なし) Method method = clazz.getMethod(args[1], new Class[0]); // メソッド実行 System.out.println(method.invoke(target, new Object[0])); } }
その他の回答 (1)
- deadlock
- ベストアンサー率67% (59/87)
そのまま、クラスの情報です。以下Class(=java.lang.Class)とクラスを分けて書きます。 あるクラス(たとえば、java.lang.String)を考えると、 そのクラスにはメソッドやフィールド、コンストラクタ、親クラス、 implementsしているインターフェースなどの情報があります。 これらの情報を表現しているのがClassクラス(のインスタンス。Classオブジェクトでも可)です。 java.lang.reflectパッケージのクラスと合わせると、使用するメソッドや 生成するインスタンスを実行時に動的に切り替えることができます。 フレームワークなどを作成するときには必須です。 実際に見てみるほうが分かりやすいかもしれませんね。 Classクラスとリフレクションを使った例を書いてみるので、ちょっと待ってください。
お礼
ありがとうございました。Classクラスに関して、わかりました。