gpt4 book ai didi

java - 如何更好地为这段代码设计类结构

转载 作者:行者123 更新时间:2023-11-30 08:41:17 25 4
gpt4 key购买 nike

我正在制作一个名为Scalar 的数据结构。该接口(interface)声明了可用的操作(如乘法/除法/加法/减法)。无论如何,我有 3 个不同的类来实现 Scalar。由分子和分母表示的 FractionalScalar 和由字符串表示的 GeneralScalar

通常我会向 Scalar 接口(interface)添加一个访问器,例如 double get()。所以我可以做类似的事情

    public class FractionalScalar implements Scalar
{

public Scalar multiply(Scalar other)
{
return new FractionalScalar(this.get() * other.get());
}
.... // other methods
}

但这只有效,因为 FractionalScalar 可以用 double 表示。 “GeneralScalar”不能用数值表示,因为它应该是一个理论值。不确定理论是不是最好的词,但这就是我的意思。

Scalar a = GeneralScalar('a');
Scalar b = GeneralScalar('b');
Scalar one = SimpleScalar(1);
// this is another class the extends FractionalScalar and is used to represent integers
Scalar two = SimpleScalar(2);

所以如果我想表示 2a 它将是 two.multiply(a);

我正在做的事情应该是能够进行\验证\表示数学证明。

但由于 GeneralScalar 没有值,我必须做这样的事情

public class FractionalScalar implements Scalar
{
Scalar multiply(Scalar other)
{
if (other instanceof FractionalScalar)
{
return new FractionalScalar (this.get() * (FractionalScalar) other.get());
}
else if (other instanceof GeneralScalar)
{
//cast it to generalScalar and do stuff
}
}......
}

我真的不喜欢 instanceof if then 子句,所以有没有更好的方法来完成我想要完成的事情?

最佳答案

你希望有完整的动态调度,但 Java 只对实例进行动态调度,而不是参数。

摆脱 instanceof 的一种方法是在标量无法计算值时在 get() 中抛出异常。无论标量的类型如何,您都可以生成一个 FractionalScalar,或者在出现异常时生成一个 GeneralScalar。显然,希望在 Scalar 中有一个像 hasValue() 的方法,以避免产生异常。

关于java - 如何更好地为这段代码设计类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165208/

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