gpt4 book ai didi

java - 检查子类的属性

转载 作者:行者123 更新时间:2023-12-01 23:48:29 24 4
gpt4 key购买 nike

我偶然发现了这种情况,但我不知道如何正确处理:

class Myclass { }
class MyclassWithAwesomeStuff extends Myclass {
public boolean awesomeStuff;
}

我将 Myclass 对象保存在数组列表中,并稍后遍历此列表:

for(Myclass m : list) {
//here I want to check if awesomeStuff is true, in case it is a MyclasswithAwesomeStuff
}

这里的问题是:父类 Myclass 不知道 AwesomeStuff 属性(它不应该知道,因为这是一个仅与派生类一起提供的功能)。但我该如何处理呢?问题是,arraylist 包含 Myclass 和 MyclassWithAwesomeStuff 元素,并且 foreach 循环始终将它们转换为 Myclass。

我想知道这是不是设计失败?

//编辑:

好吧,为了让我的问题更具体一点,这里有更多信息。我正在尝试建立一家小咖啡店:

class Coffee { }
class CoffeeMix extends Coffee {
public boolean shaken;
}

我将咖啡项保存在数组列表中:

ArrayList<Coffee> coffees = new ArrayList<Coffee>();

因此在这个数组列表中存在普通咖啡对象和咖啡混合对象。现在我想显示所有摇动的咖啡混合对象:

for(Coffee c : coffees) {
//here is the same problem as above
}

正如我从答案/评论中看到的:instanceof似乎是一个坏主意,因为它把 oo 背后的想法搞砸了,两个类都实现的接口(interface)也是一个坏主意,因为普通的咖啡不能摇晃。那么如何处理呢?

最佳答案

使用 instanceof 运算符测试 m 是否为 MyclassWithAwesomeStuff

if (m instanceof MyclassWithAwesomeStuff)
{
MyclassWithAwesomeStuff mwas = (MyclassWithAwesomeStuff) m;
// Now you can access "awesomeStuff" with "mwas"
}

关于java - 检查子类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16658109/

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