gpt4 book ai didi

java - 避免 Java 实例化

转载 作者:行者123 更新时间:2023-12-01 16:57:20 24 4
gpt4 key购买 nike

我正在尝试找到一种方法来绕过instanceof的使用。我创建了一个 Item 类,它有多个子类,例如 WeaponItem 和 BodyItem。现在我想做一个调用,例如装备(Item),它应该自行确定应该调用哪个重载函数,例如装备(BodyItem)。

有没有办法绕过这种情况下使用instanceof?您会推荐什么?我听说在大多数情况下使用 instanceof 是不好的做法,因此我想知道替代方案是什么。

代码:

inv.equip(it); // inv = inventory object, it = Item

库存类中的装备功能示例,我希望如何实现

public void equip(HelmItem it) 
{
if (it != this.getHelm())
{
this.setHelm(it);
}
}

我以前是怎么经历的:

public void equip(Item it)
{
if (it instanceof WeaponItem)
{
if (it != this.getWeapon())
{
this.setWeapon((WeaponItem) it);
}
} etc for all subclasses of item
}

最佳答案

事实上,这可以通过访问者模式来解决。

但是,它不一定是完整的访问者,而是它的简化变体。您可以将库存传递给该项目,并让该项目对其进行任何操作:

abstract class Item {
public abstract void equip(Inventory inv);
}

class HelmItem extends Item {
@Override
public void equip(Inventory inv) {
inv.setHelm(this);
}
}

class WeaponItem extends Item {
@Override
public void equip(Inventory inv) {
inv.setWeapon(this);
}
}

然后你可以调用:

it.equip(inv)

没有 instanceof 运算符。

关于java - 避免 Java 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30953608/

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