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

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

クラスのパラメータ化

クラスのパラメータ化について復習。

  • クラス名の後に「<型パラメータ名 ..>」をつけることで、パラメータとして受け付ける型を指定できる。
    • 例) 「class Hoge {}」
  • 「extends」を使用すると、受け付ける型を限定することができる。
    • 「class Hoge {}」とすると...
      • 型パラメータを指定する際に、InputStream以外を指定するとコンパイルエラーになる。
      • クラス内でT型の変数を使う場合、InputStreamのAPIを実行できる。
// 任意の型を受け付けるクラス
class A<T> {
    void set( T obj ) {}
    T get( ) { return null;  }
}
//InputStream派生の型のみ受け付けるクラス
class B<T extends InputStream> {
    void set( T obj ) {}
    T get( ) { return null;  }
}

InputStream in = null;

// クラスAには任意の型をパラメータとして指定できる。
A<Object> a1 =  new A<Object>(); 
A<String> a2 =  new A<String>(); 
A<InputStream> a3 =  new A<InputStream>(); 

a1.set(new Object());
a1.set("");
a1.set(in);
a1.set(new ByteArrayInputStream( new byte[0] ));

//a2.set(new Object()); // コンパイルエラー
a2.set(""); 
//a2.set(in); // コンパイルエラー
//a2.set(new ByteArrayInputStream( new byte[0] )); // コンパイルエラー

//a3.set(new Object()); // コンパイルエラー
//a3.set(""); // コンパイルエラー
a3.set(in);
a3.set(new ByteArrayInputStream( new byte[0] ));


// クラスBはInputStream派生の型のみパラメータとして指定できる。
//B<Object> b1 = new B<Object>(); // コンパイルエラー
//B<String> b2 =new B<String>(); 
B<InputStream> b3 =new B<InputStream>(); 
B<ByteArrayInputStream> b4 =new B<ByteArrayInputStream>(); 

//b3.set(new Object()); // コンパイルエラー
//b3.set(""); // コンパイルエラー
b3.set(in);
b3.set(new ByteArrayInputStream( new byte[0] ));

//b4.set(new Object()); // コンパイルエラー
//b4.set(""); // コンパイルエラー
//b4.set(in); // コンパイルエラー
b4.set(new ByteArrayInputStream( new byte[0] ));


//InputStream派生の型のみ受け付けるクラス
class C<T extends InputStream> {
    void set( T obj ) {
        try {
            obj.read(); // InputStream のAPIが実行できる。
        } catch (IOException e) {}
    }
    T get( ) { return null;  }
}