ダウンキャストを取り除く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;
}
}





