gpt4 book ai didi

java - 这是使用 instanceof 运算符的有效案例吗?

转载 作者:行者123 更新时间:2023-11-29 03:07:35 25 4
gpt4 key购买 nike

我是 Java 和 OOP 的初学者,我对 Java 中的继承有疑问。

在我的项目中,我有一个 Order 类,它表示为 Assets 下的订单。我打算有几个扩展 Order 的类,包括 LimitBuyOrderLimitSellOrder & 同样适用于市场订单。

我还将有一个类 Position,它由一对订单组成。为了确定Position 的类型,我必须知道首先输入了哪种类型的Order。虽然 instanceof 运算符在这种情况下可以工作,但我觉得这不是一个合适的解决方案。下面是一个精简的片段,可能有助于说明我的问题:

class Position {
//Other fields and methods omitted for clarity
public void open(Order o) {
if(o instanceof LimitBuyOrder)
//Set position type to LONG
if(o instanceof LimitSellOrder)
//Set position type to SHORT
}
}

或者我应该做一些事情,比如在 Order 中定义方法,例如 isLimitBuy() 等,它返回 false 并覆盖它们以返回true Order 是基于哪个子类扩展的?

class Position {
//Other fields and methods omitted for clarity
public void open(Order o) {
if(o.isLimitBuyOrder())
//Set position type to LONG
if(o.isLimitSellOrder())
//Set position type to SHORT
}
}

基本上,我的问题是如何正确确定子类的类型?提前致谢!

最佳答案

您的目标应该是将行为封装在订单类型中,而不是简单地在外部使用它们的类型来切换行为。

向您的“订单”类添加一个方法来完成工作,然后您根本不必知道它是什么类型:

order.openPosition(...);

让“订单”根据其类型做任何它需要做的事情。

封装的一个显着好处是您最终可以将所有特定于订单类型的行为集中在一个地方。抽象父类自然而然地提供了任何常见的订单特征。通过将代码放在一个地方(或至少在一个小的类层次结构中),您可以更改行为,而无需访问整个应用程序的代码。

关于java - 这是使用 instanceof 运算符的有效案例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306705/

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