根据参数是子类型还是父类(super class)型来重载方法,这是丑陋的设计吗?
我打算实现一个父类(super class)A和一个子类B,并且对象可以相互比较。
compareTo在A类和B类中都被重载了两次,代码显得有点乱。 感觉设计很丑。我不确定是否有更优雅的方法。
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());
}
}
最佳答案
是的,这是一个糟糕的设计。像这样就更好了。
class A implements Comparable<A> {
private Integer x;
public A(Integer i) {
x = i;
}
public Integer getX() {
return getX();
}
protected Integer compareValue() {
return getX();
}
@Override
public int compareTo(A other) {
return compareValue().compareTo(other.compareValue());
}
}
class B extends A {
Integer y;
public B(Integer a, Integer b) {
super(a);
y = b;
}
public Integer getY() {
return y;
}
@Override
protected Integer compareValue() {
return getX() + getY();
}
}
关于java - 根据参数是子类型还是父类(super class)型来重载方法,这是丑陋的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717572/