2

这可能有一个非常简单的解决方案,但我似乎无法弄清楚......
我们有一堆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;
    }

有人(或某人)可以提出更好的方法吗?

4

2 回答 2

1

使用这样的类声明:class Dimension<T extends Dimension<T>> {...}. 这允许您指定一个子类,例如class AreaDimension extends Dimension<AreaDimension> {...}.

请注意,我认为你这样做是错误的方式 - 如果你要拥有距离、面积、体积类,那么除了值、指数或维度之外,简单的距离有维度 1,面积有 2,体积有3. 这使您可以正确地进行乘法和除法。

如果您要拥有多个单位,请对各种单位使用枚举,并为每个单位的尺寸使用数组。

于 2010-08-17T01:43:07.643 回答
0

这个问题几乎已经消失了 - 我找到了一个非常不同的解决方案,所以我相信这个答案会关闭这个问题!然而,它引发了一个相关的问题,即如何将“宏”或“模板”工具引入 Java 语言,但这可能不是提出它的论坛......如果有人能建议我应该在哪里问它(或有答案),我很想听听。再次感谢大家。

于 2010-08-25T14:17:28.737 回答