相关疑难解决方法(0)

从超类方法返回子类对象

我一直回到这个问题的变种:它可能有一个非常简单的解决方案,但我似乎无法弄清楚...

我有一堆xQuantity形式的类,例如DistanceQuantity,AreaQuantity等,它们扩展了一个DimensionQuantity类.现在你可以添加或减去DistanceQuantity或AreaQuantity等,但你不能混合它们,所以我认为我需要在子类中有(短)加,减等方法,但我想减少任何逻辑重复到最低限度.但是,我需要返回子类的对象,这似乎很难从超类方法中做到.我相信这可以使用反射来完成,但AFAIK你仍然需要在子类方法的最后做一个演员,而且我被告知反射可能很昂贵......到目前为止我想出的最好的是:

在DistanceQuantity(和其他类似的):

public DistanceQuantity() {     
}

public DistanceQuantity add(DistanceQuantity d1) {
    DistanceQuantity dn = new DistanceQuantity(); 
    Object o = super.add(dn, this, d1, DistanceUnit.REF_UNIT);
    return (DistanceQuantity) o;
}
Run Code Online (Sandbox Code Playgroud)

在DimensionQuantity中(减去一些不太相关的语句):

public Object add(DimensionQuantity dn, DimensionQuantity d1, DimensionQuantity d2, 
  AbstractUnit au) {
    dn.unit = au;
    dn.scalar = d1.scalar + d2.scalar;
    dn.units = dn.scalar;    
    return dn;   
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出更精简的代码 - 这仍然是类型安全的吗?TIA

java subclassing

8
推荐指数
1
解决办法
5212
查看次数

标签 统计

java ×1

subclassing ×1