package lecture.etc;

import jp.avaj.lib.debug.L;

/**
 * 実行中のメソッド名やクラス名を取得する Java
 *
 * ・デバッグ用に実行中のメソッド名を表示したいときがあるが、サンプルのようにすればよい。
 *   ・[1]を[0]にするとgetStackTraceが表示される(笑)
 *   ・コンストラクタはGetMethodNameではなく<init>と表示されるので、クラス名を表示した方が良い。
 *
 * ・この機能を共通メソッドにしたい場合は[1]を[2]にする必要がある。
 *
 * ・他に getFileName()、getLineNumber()も使用できる。
 *
 */
public class GetMethodName {
  public static void main(String[] args) {
    // static メソッド(main)の取得例
    L.p(Thread.currentThread().getStackTrace()[1].getMethodName());
    GetMethodName obj = new GetMethodName();
    obj.method();
  }
  // コンストラクタでの取得例
  private GetMethodName() {
    L.p(Thread.currentThread().getStackTrace()[1].getMethodName());
    // 上記は<init>と表示される→クラス名を表示する
    L.p(Thread.currentThread().getStackTrace()[1].getClassName());
  }
  // インスタンスメソッドでの取得例
  private void method() {
    L.p(Thread.currentThread().getStackTrace()[1].getMethodName());
    //
    // 共通メソッドを使用した場合
    L.p(getMethodName());
  }

  /** 共通メソッド */
  public String getMethodName() {
    return Thread.currentThread().getStackTrace()[2].getMethodName();
  }
}
//---------------------------------------------------
//・目次 Javaエトセトラ
//・目次 - Java入門
//・目次 - ビジネスパーソンの常識と非常識
//・目次 - 論理・発想・思考についての考察と鍛え方
//---------------------------------------------------