Symbolsymbol kann nicht gefunden werden:Methode Prozess(WorkerAnt)
Frage
Ich mache dieses AntFarm-Projekt für meine Java-Klasse.Dieses Projekt besteht aus verschiedenen Klassen (Food, WorkerAnt, Queen) und sie interagieren über eine Schnittstelle (mit einer Methode namens Process) miteinander.
http://ljhs.sandi.net/faculty/volger/apajava/GridWorld/Assignments/AntFarm/ - Projekt
Ich stecke derzeit fest processActors()
Methode in WorkerAnt
.(Es befindet sich fast am Ende der Seite.)
Der aktuelle Code ist der folgende:
public void processActors(ArrayList<Actor> actors) {
for (Actor nextActor : actors) {
nextActor.process(this);
}
}
Der Fehler, den ich erhalte, ist der folgende.
Symbolsymbol kann nicht gefunden werden:Methode Prozess(WorkerAnt)
Lösung
Gehen Sie von der verlinkten Aufgabe aus, Actor
hat keine process(WorkerAnt)
Methode.
Stattdessen ist dies Teil der Processable
Schnittstelle (und somit Food
).
Stellen Sie daher sicher, dass Ihre Actor
ist ein Actor
umsetzen Processable
(zum Beispiel a Food
).
Idealerweise würden Sie Ihre ändern processActors(ArrayList<Actor> actors)
Methode, um so etwas wie processProcessables(ArrayList<Processable> processables)
.
Allerdings sehe ich in der Aufgabe, dass Sie eine implementieren müssen processActors(ArrayList<Actor> actors)
Sie können das also nicht wirklich tun (obwohl ich das als schlechtes Design bezeichnen werde – es ist so, als hätte man eine Methode). divide(object, object)
anstatt divide(double, double)
).
Um herauszufinden, warum es sich um ein schlechtes Design handelt, heißt es in der Aufgabe
Prozessakteure:Jeder Akteur in den Akteuren muss seine Prozessmethode aufrufen.
Außer Actor
s haben nicht process
Methoden - Processable
s tun, und Actor
s sind es nicht Processable
.
Auf jeden Fall müssen Sie sich damit zufrieden geben, dass Sie welche erwarten Actor
soll sein Processable
s und machen Sie so etwas:
for(Actor nextActor : actors)
{
if (nextActor instanceof Processable)
((Processable)nextActor).process(this);
}
Das sollten Sie jedoch anhand der Aufgabe erkannt haben:
Ein Schauspieler könnte eine Königin, ein Kuchen, ein Keks oder ein Arbeiter sein.Ohne die verarbeitbare Schnittstelle müssten ProzessActors den Art des Akteurs bestimmen und dann die Akteurreferenz heruntergefahren, bevor der Aufruf zur Verarbeitung gestellt wird.Da jedoch jeder dieser Klassen verarbeitbare Implementierungen implementiert, müssen ProzessActors den Akteur nur vor dem Anruf auf verarbeitbare Werbung geben.Diese polymorphe Verarbeitung ist zulässig, da verarbeitbar die Prozessablaufmethode enthält.Die Java -Laufzeitumgebung (JRE) bestimmt den tatsächlichen Objekttyp zur Laufzeit und ruft die entsprechende Prozessmethode auf.