背景:
我有四个类,代表一个度量单位:毫米,英寸,像素,FootAndInch。
每个类都是BigDecimal的包装类,每个类都有相同的方法子集:
...
add(BigDecimal value)
divide(BigDecimal value)
multiple(BigDecimal value)
subtract(BigDecimal value)
...在每个单独的类中重复相同的方法似乎很乏味。因此,我创建了一个抽象类(称为"Unit"),希望只需要编写每个方法一次,并使用多态:
public abstract class Unit {
BigDecimal value;
public Unit(BigDecimal value) {
this.value = value;
}
public Unit(int value) {
this.value = new BigDecimal(value);
}
public Unit(String value) {
this.value = new BigDecimal(value);
}
public Unit(Unit unit) {
this.value = unit.bigDecimal();
}
public abstract Unit add(int value);
public abstract Unit add(int value, MathContext mathContext);
public abstract Unit add(Unit value);
public abstract Unit add(Unit value, MathContext mathContext);
public abstract Unit add(BigDecimal value);
public abstract Unit add(BigDecimal value, MathContext mathContext);
public abstract Unit divide(Unit value, MathContext mathContext);
public abstract Unit divide(int value, MathContext mathContext);
public abstract Unit divide(BigDecimal value, MathContext mathContext);
public abstract Unit[] divideAndRemainder(Unit value, MathContext mathContext);
public abstract Unit multiply(BigDecimal value);
public abstract Unit multiply(BigDecimal value, MathContext mathContext);
public abstract Unit multiply(int value);
public abstract Unit multiply(int value, MathContext mathContext);
public abstract Unit multiply(Unit value);
public abstract Unit multiply(Unit value, MathContext mathContext);
public abstract Unit negate();
public abstract Unit plus();
public abstract Unit remainder(Unit value, MathContext mathContext);
public abstract Unit subtract(int value);
public abstract Unit subtract(int value, MathContext mathContext);
public abstract Unit subtract(Unit value);
public abstract Unit subtract(Unit value, MathContext mathContext);
public abstract Unit subtract(BigDecimal value);
public abstract Unit subtract(BigDecimal value, MathContext mathContext);
public double doubleValue() {
return value.doubleValue();
}
public float floatValue() {
return value.floatValue();
}
public int intValue() {
return value.intValue();
}
public BigDecimal bigDecimal() {
return value;
}
@Override public abstract String toString();
}现在,Mm,Inch,Pixel,FootAndInch每个扩展单元
问题:下面的语句显示了一个错误:
Mm value1 = new Mm(1000);
Mm result = value1.divide(new Mm(10), new MathContext(10, RoundingMode.CEILING));“不兼容类型:单元不能转换为Mm”。
我理解这个错误,但是我不知道如何重新排列我的代码,这样我只编写了一次方法。有什么建议吗?
编辑:只是为了澄清,Unit方法是在Unit中实现的。我没有让他们试着缩短这个问题。
发布于 2015-11-30 16:41:01
我看到了两个选项:要么只创建一个为度量类型保留int和enum的类(不需要多态)。或者将Unit转换为泛型超类单元,并使所有抽象函数返回类型T,然后将Mm定义为Mm类扩展单元。
https://stackoverflow.com/questions/34003323
复制相似问题