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)

War es hilfreich?

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 Actors haben nicht process Methoden - Processables tun, und Actors sind es nicht Processable.

Auf jeden Fall müssen Sie sich damit zufrieden geben, dass Sie welche erwarten Actorsoll sein Processables 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top