シンボル シンボルが見つかりません:メソッドプロセス(WorkerAnt)

StackOverflow https://stackoverflow.com/questions/5985942

  •  12-11-2019
  •  | 
  •  

質問

私は Java クラス用にこの AntFarm プロジェクトを実行しています。このプロジェクトはさまざまなクラス (Food、WorkerAnt、Queen) で構成されており、それらはインターフェイス (プロセスと呼ばれるメソッド) を使用して相互に対話します。

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); 
  }
}

得られるエラーは次のとおりです。

シンボル シンボルが見つかりません:メソッドプロセス(WorkerAnt)

役に立ちましたか?

解決

リンクされた課題に従っていくと、 Actor はありません process(WorkerAnt) 方法。

代わりに、これは Processable インターフェイス (したがって、 Food).

したがって、 Actor です Actor 実装する Processable (たとえば、 Food).

理想的には、 processActors(ArrayList<Actor> actors) 次のようなメソッド processProcessables(ArrayList<Processable> processables).

ただし、課題では、次のことを実装する必要があることがわかります。 processActors(ArrayList<Actor> actors) したがって、実際にはこれを行うことはできません(ただし、これは悪い設計であると呼びますが、これはメソッドを用意するのと同じです) divide(object, object) の代わりに divide(double, double)).

なぜそれが悪い設計なのかを確認するには、課題には次のように書かれています。

プロセスアクター:アクター内の各アクターは、その process メソッドを呼び出す必要があります。

を除外する Actor持っていない process メソッド - Processableそうです、そして Actorではありません Processable.

いずれにせよ、ある程度の期待があるという事実に甘んじる必要があります。 Actorなるだろう Processables そして次のようなことを行います:

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

ただし、課題から次のことに気づいたはずです。

俳優は、女王、ケーキ、クッキー、または労働者である可能性があります。加工可能なインターフェイスがなければ、プロセスはアクターのタイプを決定し、処理する前にアクターの参照をダウンキャストする必要があります。ただし、これらのクラスはそれぞれ加工可能なものであるため、プロセスは通話前にアクターを処理可能にキャストする必要があります。加工可能にはプロセスの抽象的な方法が含まれているため、この多型処理は許可されます。Java実行時間環境(JRE)は、実行時に実際のオブジェクトのタイプを決定し、適切なプロセスメソッドを呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top