2008/03/03
Javaでタプルを返したけれど
「Javaでタプルを返したい」
上の結果、Tuple.javaがコミットされたのですが、その後、なんとTuple3.javaとTuple4.javaまでコミットされました。 こうなった原因は、元の命名が悪かったせいではないかと予想します。 次のようにすべきでした。
public class ConsCell<L,R> { public static <L,R> ConsCell<L,R> cons(L car, R cdr) { return new ConsCell<L,R>(car, cdr); } public final L car; public final R cdr; public ConsCell(L car, R cdr) { super(); this.car = car; this.cdr = cdr; } // you can use methods if you want public final L car() { return car; } public final R cdr() { return cdr; } }
つまらない落し穴があります。
ConsCell<String,String> c = ConsCell.cons("foo", "baz"); ConsCell<String,String> c = ConsCell.cons("foo", null);
これらはOK。
ConsCell<String,ConsCell<String,String>> lst = ConsCell.cons("foo", ConsCell.cons("bar", "baz"));
これもOK。
ConsCell<String,ConsCell<String,String>> lst = ConsCell.cons("foo", ConsCell.cons("bar", null));
これはコンパイルエラー。
ConsCell<String,ConsCell<String,String>> lst = ConsCell.cons("foo", ConsCell.cons("bar", (String)null)); System.out.println(lst.car); System.out.println(lst.cdr.car);
キャストすると通ります。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/java-conscell/tbping