読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

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

今日の「作ってみたけど微妙だった」

Java

「ロックしてから処理をする機構を、タイプセーフな感じで」ということで、処理のインターフェイスとロツクメソッドを定義してみたわけですが。

/**
 * 処理
 * @param <X> 戻り値の型
 * @param <E1> 例外の型1
 * @param <E2> 例外の型2
 * @param <E3> 例外の型3
 * @param <E4> 例外の型4
 */
static interface Proc<X,
   E1 extends Throwable, E2 extends Throwable,
   E3 extends Throwable, E4 extends Throwable > {

    /**
     * 処理を実行する。
     * @return 実行結果
     * @throws E1 例外1
     * @throws E2 例外2
     * @throws E3 例外3
     * @throws E4 例外4
     */
    X call() throws E1,E2,E3,E4;
}
...
/**
 * ロックしてから処理を実行する。
 */
static
<X,E1 extends Throwable, E2 extends Throwable,
   E3 extends Throwable, E4 extends Throwable>
X lock( Proc<X,E1,E2,E3,E4> proc )
throws E1,E2, E3, E4 {
    try {
        // .. ロック
        return proc.call();
    } finally {
        // .. ロック解放
    }
}

利用例。

// 例外を4種類スローする処理
lock ( new Proc<String, AAAException, BBBException, CCCException, DDDException>() {
    public String call()
    throws AAAException, BBBException, CCCException, DDDException {
        // ..処理
        return "";
    }
});
// 例外を2種類スローする処理
lock ( new Proc<String, AAAException, BBBException, BBBException, BBBException>() {
    public String call()
    throws AAAException, BBBException {
        // ..処理
        return "";
    }
});

んー。

  • 例外をクラスの型パラメータとcallのthrowsの両方に並べるのがうっとうしいな。
    • 実際には例外クラスの名前はもっと長くて、かなりの威圧感があった・・・。
  • 例外が2個でいい場合も、クラスの型パラメータでは4つ書かないといかないのが何とも。
    • 可変長型パラメータとかあればいいのかな?

まぁ、例外をいろいろ統廃合すればE2までに収まったので、そのまま使ったわけですが。