MethodInfo.java



import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/** クラスのメソッドの情報を調べる MethodInfo */

public class MethodInfo {

 /** 最初に呼び出されるメソッド */

   public static void main( String argv[] ) {

     try {
        if( argv.length != 1 ) {

            System.out.println("Usage:java MethodInfo 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);
     }
   }
}