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