gpt4 book ai didi

java - 如何访问我的数组列表中的 "name"事物,它是我的接口(interface)类型的数组列表?

转载 作者:行者123 更新时间:2023-12-01 17:16:54 27 4
gpt4 key购买 nike

标题很冗长,可能令人困惑,但我不知道如何让它变得更好......我希望能够访问数组列表中的值并将其打印出来。

我有一个名为 ThingBagInterface 的接口(interface)。这个 ThingBagInterface 只有一个方法,如下所示:

interface ThingBagInterface {
public String getType();
}

我现在有一个名为 ThingBag 的类,它是一个可以容纳一堆不同东西的包,例如生物、建筑物等。

在我的 ThingBag 类中,我已经像这样初始化了我的所有生物:

public void initCreatures(){
waterSnake = new Creature("Water Snake", Terrain.SWAMP, false, false, false, false, 1, 0);
etc...
}

然后我有一个函数 populateBag() ,如下所示:

public void populateBag(){
initCreatures();

bag.add(bears);
}

我的数组列表定义位于 ThingBag 中,如下所示:

ArrayList<ThingBagInterface> bag = new ArrayList<ThingBagInterface>();

我的 Creature 构造函数如下所示:

    public Creature(String n, Terrain startTerrain, boolean flying, boolean magic, boolean charge, boolean ranged, int combat, int o){
name = n;
flyingCreature = flying;
magicCreature = magic;
canCharge = charge;
rangedCombat = ranged;
combatValue = combat;
owned = o;
}

我想打印出熊的名字。

所以主要是我这样做:

ThingBag tb = new ThingBag();
tb.populateBag();
for(int i= 0; i<tb.bag.size(); i++){
System.out.println(i+". "+tb.bag.get(i));
}

为什么我无法访问我包中的名字?如果我没有使用界面,我可以说:

System.out.println(i+". "+tb.bag.get(i).name) 

但我现在不能。关于如何获取该值(value)有什么想法吗?我现在只能访问内存地址...

最佳答案

您的 bag 变量声明为

ArrayList<ThingBagInterface> bag ...

从概念上讲,这意味着它至少包含 ThingBagInterface 对象。它可以包含任何类型的 ThingBagInterface,但它至少必须是 ThingBagInterface

这也意味着编译器只能保证它包含 ThingBagInterface,因此您只能将其元素作为 ThingBagInterface 实例进行交互。

name 不是 ThingBagInterface 类型上存在的字段,它存在于 Creature 上。

您可以转换 bag.get(i) 的返回值或声明 ThingBagInterfacegetName() 方法,并实现它在子类型中,并在循环中调用它。

关于java - 如何访问我的数组列表中的 "name"事物,它是我的接口(interface)类型的数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395682/

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