gpt4 book ai didi

java - 使用instanceof或public方法获取实例

转载 作者:行者123 更新时间:2023-12-01 07:32:07 25 4
gpt4 key购买 nike

所以我有 3 门课:

  • 项目
  • GroupItem 扩展 Item
  • ProductItem 扩展项目

我将一组 Item 对象传递给一个类,并希望根据它们的类类型执行单独的操作。

使用 instanceof 是否是一种可接受的方法,或者我应该有一个内部 boolean isGroup() 方法,该方法将在指定子类的初始化时设置.

 class Item {
protected boolean isGroup = false;
public boolean isGroupItem() { return isGroup; }
}

class GroupItem extends Item {
public GroupItem() {
isGroup = true;
}
}

class ProductItem extends Item {
public ProductItem() {
isGroup = false;
}
}


class Promotion {
// Item can be either a group or a list of items
private List<Item> items = new LinkedList<Item>;
public void addItem(Item itemObj) {
items.addItem(itemObj);
}
public List<Item> getItems() {
return items;
}
}



class Checker {
// Items retrieved from Promotion and passed from another class as array
public Checker(Item[] items) {
// either

if(items[0] instanceof GroupItem) {
// Do something ...
}

// or

if(items[0].isGroupItem()) {
// Do something ...
}
}
}

所以我的问题是:

  • 实例还是方法?
  • 如果方法是在“商品”或“促销”中?
  • 而且,为什么? (只是为了让我更好地理解推理)

提前致谢

最佳答案

对要作为参数传递的实际类型使用不同的方法。

通常,使用实例意味着您的模型存在问题。

如果您需要对不同的子类型有不同的行为,则意味着您并没有真正使用父类型。此外,您必须了解实现细节,但事实不应该如此。

如果您拥有的继承只是技术性的,请尝试使用组合而不是继承

关于java - 使用instanceof或public方法获取实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478399/

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