package lecture.etc;

import java.lang.reflect.Method;

import jp.avaj.lib.debug.L;

/** リフレクション - メソッドの取得 Java */
class GetMethod {
  public static void main(String[] args) {
    Class myClass = MyClass.class;
    L.p("-- 自クラスで定義された、すべてのメソッドを取得する");
    Method[] methods = myClass.getDeclaredMethods();
    for (Method method : methods) {
      print(method);
    }
    L.p("-- publicメソッド(継承したものを含む)を取得する");
    methods = myClass.getMethods();
    for (Method method : methods) {
      print(method);
    }
    L.p("-- パラメータを指定してメソッドを取得する");
    try {
      Class[] params = new Class[]{String.class,int.class};
      Method method = myClass.getMethod("method22",params);
      print(method);
      //
      params = new Class[]{String.class,Integer.class};
      method = myClass.getMethod("method23",params);
      print(method);
      // 存在しないメソッド
      method = myClass.getMethod("method24",params);
      print(method);
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
    //
  }
  static class MyClass {
    private String method00() { return ""; }
    private String method01(String str) { return ""; }
    private String method02(String str, int i) { return ""; }
    private void method03(int i) {}
    private void method04(Integer i) {}
    //
    protected String method10() { return ""; }
    protected void method11(String str) { }
    //
    public String method20() { return ""; }
    public void method21(String str) {}
    public void method22(String str,int i) {}
    public void method23(String str,Integer i) {}
  }
  private static void print(Method method) {
    L.p(method.toString());
  }
}
//---------------------------------------------------
//・目次 Javaエトセトラ
//  http://blogs.yahoo.co.jp/artery2020/40576157.html
//・目次 - Java入門
//  http://blogs.yahoo.co.jp/artery2020/39975776.html
//・目次 - ビジネスパーソンの常識と非常識
//  http://blogs.yahoo.co.jp/artery2020/39728331.html
//・目次 - 論理・発想・思考についての考察と鍛え方
//  http://blogs.yahoo.co.jp/artery2020/39657784.html
//---------------------------------------------------