Tupleの型パラメータが鬱陶しいときには
この前作った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にすればいいんじゃね?」となるのが難しいところ。その辺は「内部クラスですから」と潔く割り切りたい。