ClassInfo.java
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/** クラスの情報を調べる ClassInfo */
public class ClassInfo {
/** 最初に呼び出されるメソッド */
public static void main( String argv[] ) {
try {
if( argv.length != 1 ) {
System.out.println("Usage:java ClassInfo classname");
System.exit(0);
}
Class cls = Class.forName( argv[0] ); // クラス情報のオブジェクト
Method[] methods = cls.getMethods(); // メソッドの一覧情報を得る
for( int i=0; i<methods.length; i++ ) {
String name = methods[i].getName(); //メソッド名を記憶
String access; // アクセスモードの情報を記憶
int flag = methods[i].getModifiers(); // 修飾子の情報を得る
if( Modifier.isPublic(flag) ) access = "public";
else if( Modifier.isProtected(flag) ) access = "protected";
else if( Modifier.isPrivate(flag) ) access = "private";
else access = "";
Class c = methods[i].getReturnType(); // 返値のクラス
String returnType = c.getName(); // 返値のクラス名を記憶
Class[] prms = methods[i].getParameterTypes();
StringBuffer prmTypes
= new StringBuffer(""); // 引数の型を記憶する
for( int j=0; j<prms.length-1; j++ )
prmTypes.append( prms[j].getName() + ", " );
if( prms.length >= 1 )
prmTypes.append( prms[prms.length-1].getName() );
System.out.println( access + " " + returnType + " "
+ name + "(" + prmTypes + ")" );
}
}
catch( SecurityException e ){
System.out.println("Can not access the class");
System.exit(0);
}
catch( ClassNotFoundException e ){
System.out.println("No such class");
System.exit(0);
}
}
}