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