<< 2006/01/21 | Home | 2006/01/23 >>
PR: 転職    お墓    エコ    通販    結婚相談所    シルバー    質屋    葬式    漫画    エステサロン   

猫亀

ダウンキャストを取り除くGenerics

ダウンキャストを取り除くためにGenericsを使うのってどうなんだろう。

public class Base implements Comparable<Base> {
    public int compareTo(Base o) {
        return 0;
    }
}

確かにキャストが不要になるから、嬉しいって言えば嬉しいのだけど、継承すると破綻する。

public class Sub extends Base implements Comparable<Sub> {
    public int compareTo(Sub o) {
        return 0;
    }
}
$ javac -cp . Sub.java
Sub.java:1: java.lang.Comparable を異なる引数 <Sub> と <Base> で継承することはで
きません。
public class Sub extends Base implements Comparable<Sub> {
       ^
エラー 1 個

結局、継承したら自分で共変メソッドを実装するしかない感じ。

public class Sub extends Base {
    @Override public int compareTo(Base o) {
        return compareTo((Sub)o);
    }

    public int compareTo(Sub o) {
        return 0;
    }
}
このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8