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

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

Tupleの型パラメータが鬱陶しいときには

Java

この前作ったTupleですが、TrioとかQuartetを使っていると、型パラメータが長くなってしまって鬱陶しい時があります。

List<Trio<String,Number,String>> kittens =
    new ArrayList<Trio<String,Number,String>>();

kittens.add( new Trio<String,Number,String>( "mii", 1, "mike" ) );
kittens.add( new Trio<String,Number,String>( "kuro", 0, "egyptian" ) );
kittens.add( new Trio<String,Number,String>( "shiro", 0, "egyptian" ) );
kittens.add( new Trio<String,Number,String>( "tora", 2, "scotish fold" ) );

for ( Trio<String,Number,String> kitten : kittens ) {
    System.out.println( kitten );
}

こういうときは、継承して派生クラスを作ると吉です。

private static class Kitten extends Trio<String,Number,String> {
    private Kitten ( String name, int age, String type ) {
        super( name,age,type );
    }
}

これを使えば↓のように、ちょっとすっきり書けます。

List<Kitten> kittens = new ArrayList<Kitten>();

kittens.add( new Kitten( "mii", 1, "mike" ) );
kittens.add( new Kitten( "kuro", 0, "egyptian" ) );
kittens.add( new Kitten( "shiro", 0, "egyptian" ) );
kittens.add( new Kitten( "tora", 2, "scotish fold" ) );

for ( Kitten kitten : kittens ) {
    System.out.println( kitten );
}

個人的には、クラスは具体的なオブジェクトなのにアクセサはgetA()とかだったりする点がちょっと気になりますが、我慢できずにアクセサも書いたりすると、「なら、継承せずに普通のJavaClassにすればいいんじゃね?」となるのが難しいところ。その辺は「内部クラスですから」と潔く割り切りたい。