1

我正在为我的 Java 类做这个 AntFarm 项目。该项目由不同的类(Food、WorkerAnt、Queen)组成,它们使用接口(使用称为 process 的方法)相互交互。

http://ljhs.sandi.net/faculty/volger/apajava/GridWorld/Assignments/AntFarm/ - 项目

我目前坚持processActors()使用WorkerAnt. (它几乎在页面的底部。)

当前代码如下:

public void processActors(ArrayList<Actor> actors) {
  for (Actor nextActor : actors) {
    nextActor.process(this); 
  }
}

我得到的错误如下。

找不到符号符号:方法 process(WorkerAnt)

4

1 回答 1

2

通过链接分配进行,Actor没有process(WorkerAnt)方法。

相反,这是Processable接口的一部分(因此是Food)。

因此,请确保您Actor是一个Actor实现Processable(例如 a Food)。

理想情况下,您会将processActors(ArrayList<Actor> actors)方法更改为类似processProcessables(ArrayList<Processable> processables).

但是,我在作业中看到你需要实现 aprocessActors(ArrayList<Actor> actors)所以你不能真正做到这一点(尽管我将把它称为糟糕的设计 - 它类似于使用方法divide(object, object)而不是divide(double, double))。

为了看看为什么它是糟糕的设计,作业说

processActors:actors中的每个actor都需要调用它的process方法。

除了Actors 没有process方法 - Processables 有,而Actors 没有Processable

在任何情况下,您都必须接受这样一个事实,即您期望 some Actors 是Processables 并执行以下操作:

for(Actor nextActor : actors)
{
    if (nextActor instanceof Processable)
        ((Processable)nextActor).process(this); 
}

但是,您应该从作业中意识到这一点:

Actor 可以是 QueenAnt、Cake、Cookie 或 WorkerAnt。如果没有 Processable 接口,processActors 将需要确定 actor 的类型,然后在调用 process 之前向下转换 actor 引用。但是,由于这些类中的每一个都实现了 Processable,因此 processActors 只需要在调用之前将 actor 转换为 Processable。这种多态处理是允许的,因为 Processable 包含进程抽象方法。Java 运行时环境 (JRE) 在运行时确定对象的实际类型并调用适当的处理方法。

于 2011-05-13T00:11:49.480 回答