【发布时间】:2010-08-17 00:49:01
【问题描述】:
这可能有一个非常简单的解决方案,但我似乎无法弄清楚......
我们有一堆 xQuantity 形式的类,例如DistanceQuantity、AreaQuantity 等,它们扩展了一个类 DimensionQuantity。现在可以加减DistanceQuantity's 或AreaQuantity's 等,但不能混合使用。所有子类都有 add()、subtract()、ge() 等方法,因此将共享逻辑放入 DimensionQuantity 会很好,但我一直遇到转换问题。
到目前为止,我想出的最好方法是生成一个对象,然后将其转换为子类的方法,但最好完全摆脱子类 add() (以及其他类似方法)!下面是代码(省略了一些东西):
距离数量:
public DistanceQuantity add(DistanceQuantity d1) {
Object o = new DistanceQuantity(scalar + d1.scalar, REF_UNIT);
return (DistanceQuantity) o;
}
在维度数量中:
@SuppressWarnings({"rawtypes", "unchecked"})
public Object add(DimensionQuantity d1) {
Class c1 = this.getClass();
Class c2 = d1.getClass();
if (c1 != c2)
throw new RuntimeException();
double d = scalar + d1.scalar;
Constructor c = null;
c = c1.getConstructor(Double.TYPE, AbstractUnit.class);
Object o = null;
o = c.newInstance(d, REF_UNIT);
return o;
}
有人(或其他人)可以提出更好的方法吗?!
【问题讨论】:
-
哪个版本的 C 会有所帮助:)
-
嗯,这回答了这个问题,哈哈。我不知道 re: java 但听起来你需要查看泛型
-
好吧,如果您可以布置类层次结构并解释您在此处尝试执行的操作,将会有所帮助。你的问题很模糊。
-
通过“混合”它们,您是指足以处理任何一种类型(因此相同维度)的两个对象的通用方法,还是添加两个可能不同类型(和不同维度)的值?
标签: java subclassing