gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:57:56 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com