java - 从方法返回动态分配类的对象

标签 java subclassing

这可能有一个非常简单的解决方案,但我似乎无法弄明白......
我们有一堆 xQuantity 形式的类,例如DistanceQuantity、AreaQuantity 等,它们扩展了类 DimensionQuantity。现在您可以添加或减去 DistanceQuantity 或 AreaQuantity 等,但您不能混合使用它们。所有子类都有 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;
    }

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

最佳答案

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

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

如果您要拥有多个单元,请为各种单元使用枚举,并为每个单元的维度使用数组。

关于java - 从方法返回动态分配类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3498549/

相关文章:

java - 在我的 "while"行上出现不兼容类型错误

delphi - 如何在编辑框中接收TAB键按下?

Delphi:如何以相反的顺序删除子类?

Java - 如何匹配包含单引号的正则表达式模式?

iphone - 继承 UIImageView 的子类 - 前向声明错误

ios - 在 Swift 的 NSObject 子类的初始化器中调用 super.init()

ios - UIWebView 和 Swift : Detect when a video starts playing

java - Spring Cloud Hystrix : FallbackMethod not invoked

java - Android TestCase 中的 Dagger 2 依赖注入(inject)

java - 随机使用 Weblogic 和第 7 层的 Java Webservice 中的 Policy Falsified 错误