Personal tools
You are here: Home ブログ 井上
« March 2008 »
Su Mo Tu We Th Fr Sa
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
Recent comments
AirOne v5.0.1出てしまいました inoue 2008-10-29
Re:Reversible debugging in GDB morita 2008-10-09
Re:Google Chromeの発表には驚きました inoue 2008-09-15
Re:Google Chromeの発表には驚きました Anonymous User 2008-09-10
Re:Windowsのタスクマネージャの闇 horii 2008-09-09
Re:Google Chromeの発表には驚きました inoue 2008-09-04
Re:Google Chromeの発表には驚きました inoue 2008-09-04
Re:Google Chromeの発表には驚きました inoue 2008-09-04
Re:Google Chromeの発表には驚きました Anonymous User 2008-09-03
Re:Software Design 2008年2月号「Emacsマスターへの道」の原稿を公開 elim 2008-07-25
Re:Rails(ActiveRecord)のJOINのイディオム inoue 2008-06-20
Re:「ピアレビュー」を読みました Anonymous User 2008-05-12
Categories
カテゴリなし
 
Document Actions

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);

キャストすると通ります。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/java-conscell/tbping

Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.