シンボル シンボルが見つかりません:メソッドプロセス(WorkerAnt)
質問
私は 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
なるだろう Processable
s そして次のようなことを行います:
for(Actor nextActor : actors)
{
if (nextActor instanceof Processable)
((Processable)nextActor).process(this);
}
ただし、課題から次のことに気づいたはずです。
俳優は、女王、ケーキ、クッキー、または労働者である可能性があります。加工可能なインターフェイスがなければ、プロセスはアクターのタイプを決定し、処理する前にアクターの参照をダウンキャストする必要があります。ただし、これらのクラスはそれぞれ加工可能なものであるため、プロセスは通話前にアクターを処理可能にキャストする必要があります。加工可能にはプロセスの抽象的な方法が含まれているため、この多型処理は許可されます。Java実行時間環境(JRE)は、実行時に実際のオブジェクトのタイプを決定し、適切なプロセスメソッドを呼び出します。