当前位置: 首页 > 知识库问答 >
问题:

如何访问我接口类型的数组列表中的事物的“名称”?

姚才捷
2023-03-14

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

我有一个叫做ThingBagInterface的接口。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);
}

我的数组列表html" target="_blank">定义在ThingBag中,看起来像这样:

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

我的生物构造器如下所示:

    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) 

但是我现在不能。有什么办法能让我得到这个价值吗?我现在只能访问内存地址...

共有3个答案

汪翰墨
2023-03-14

也许你可以做一个类似于soSystem的演员阵容。出来println(i)结核。袋子。)得到(我)

这是因为接口没有name属性。请记住,接口中的字段总是隐式公共的静态和最终字段。

我希望这有帮助。

能文华
2023-03-14

您需要更明智地设计ThingBagInterface接口。有名字是要求吗?如果是这样,接口需要一种访问对象名称的方法。(这需要是一个方法,因为接口不能指定字段。)当我们在做的时候,选择一个比ThingBagInterface更有信息性的名字是个好主意。

向苗宣
2023-03-14

您的bag变量声明为

ArrayList<ThingBagInterface> bag ...

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

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

name不是存在于ThingBag界面类型上的字段,它存在于生物上。

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

 类似资料:
  • 问题内容: 例如, 我正在尝试使用运行时反射获取列表。 问题答案: 试试这个: 游乐场的例子 获取接口类型的reflect.Type是棘手的部分。请参阅如何获取接口的reflect.Type?进行解释。

  • 我有一个问题: 我有一个列表Java,我填充了不同的值。例如,我有: 我也有其他价值观。现在,我想在这个列表中只搜索第一个字段。例如,我想要A的indexOf。我尝试过写这段代码: 但我得到-1作为回报。我想知道在加载数组时如何访问列表中的字段。

  • 函数,我正在尝试访问令牌(末尾的注释行不起作用): 在这里可以看到调试器内部的结构:

  • 问题内容: 该模块为通用类型提示提供了一个基类:该类。 方括号中的接受类型参数的子类,例如: 我的问题是,如何访问这些类型参数? 也就是说,作为输入,我如何获得和输出? 基本上我正在寻找这样的功能 问题答案: Python 3.8更新 从Python3.8开始,有: PEP-560还提供了,它允许我们使用第 n 个通用基的参数: 旧答案 可能性1 从Python 3.6开始。有一个公共和()字段。

  • 我对打字稿有点陌生,让我有点困惑的一件事是类型/接口声明。我正在编写一个库,它目前有几个类和更多的类型/接口声明。我在大多数代码中使用这些类型/接口,最初我会将它们放在 types 文件夹中的单个文件中,然后我会将它们导入到需要的任何位置,现在我在 文件夹中有一个声明命名空间类型的 ,在这个中我导出我在整个代码中使用的所有类型/接口。这种方法可以吗,或者是否有更好的方法来组织类型和接口定义?

  • 我使用包来做并行非负矩阵分解,即X=WH。我使用类中的方法。如下面描述中所提到的,所得矩阵存储在中。 在包的GitHub页面中,类是 你能解释一下如何从这个类中提取信息吗? 为了方便起见,我还把笔记本放在这里的Colab上。