引数がサブタイプかスーパータイプかによってメソッドをオーバーロードするのは醜いですか?引数がサブタイプかスーパータイプかによってメソッドをオーバーロードするのは醜いですか?
私は、スーパークラスAとサブクラスBを暗示するつもりであり、オブジェクトは互いに比較できます。
compareToはクラスAとクラスBの両方で2回オーバーロードされており、コードはちょっと混乱しているようです。 醜いデザインのように感じます。より洗練されたアプローチがあるかどうかはわかりません。
class A implements Comparable<A> {
private Integer x;
public A(Integer i) {
x = i;
}
public Integer getX() {
return x;
}
public int compareTo(A other) {
return x.compareTo(other.getX());
}
public int compareTo(B other) {
return x.compareTo(other.getX() + other.getY());
}
}
class B extends A {
private Integer y;
public B(Integer a, Integer b) {
super(a);
y = b;
}
public Integer getY() {
return y;
}
@Override
public int compareTo(A other) {
return Integer.compare(this.getX() + y, other.getX());
}
@Override
public int compareTo(B other) {
return Integer.compare(this.getX() + y, other.getX() + other.getY());
}
}
ありがとうございました。それはとても役に立ちます。改善するためにコードを再構成する方法を知ってもいいですか?ありがとうございます – CodingNow
OldCurmudgeonの再構成は、サブクラスのどれもがあなたの 'compareTo'メソッドをオーバーライドして、何か異なることをしない限り、機能します。 'compareTo'メソッドを' final'にすることでそれを強制することができます。 – Brian