無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

メソッドの呼び出し元クラスを取得

sun.reflect.Reflection#getCallerClass( int )でメソッドの呼び出し元クラスを取得します。引数でスタックの深さを指定します。

サンプル:

import sun.reflect.Reflection;

public class GetCallerClass {
    public static void main( String[] args ) {
        new Master().call();
    }
    static class Master {
        void call () {
            new Kitten().meow();
        }
    }
    static class Kitten {
        void meow () {
            // 呼び出し元クラス名を得る。
            System.out.println( "0 : " + Reflection.getCallerClass( 0 ).getName());
               // => Reflection
            System.out.println( "1 : " + Reflection.getCallerClass( 1 ).getName()); 
               // => Kitten
            System.out.println( "2 : " + Reflection.getCallerClass( 2 ).getName()); 
               // => Master
            System.out.println( "3 : " + Reflection.getCallerClass( 3 ).getName()); 
               // => GetCallerClass
            System.out.println( "4 : " + Reflection.getCallerClass( 4 ).getName()); 
              // エラー
        }
    }
}

出力:

0 : sun.reflect.Reflection
1 : GetCallerClass$Kitten
2 : GetCallerClass$Master
3 : GetCallerClass
Exception in thread "main" java.lang.NullPointerException
	at GetCallerClass$Kitten.meow(GetCallerClass.java:22)
	at GetCallerClass$Master.call(GetCallerClass.java:11)
	at GetCallerClass.main(GetCallerClass.java:6)

ReflectionはJDKに含まれるクラスですが、sun.*のクラスなので仕事で使うと怒られるかもしれません。ご利用は自己責任で。

追記 (07-05-24)

sun.* パッケージについての注Javaのドキュメントにありました。

  • 他のJava互換実行環境
  • 将来のJava実行環境

での動作は保証されないとのことです。