Domanda

Sto realizzando questo progetto AntFarm per la mia classe Java.Questo progetto è composto da diverse classi (Food, WorkerAnt, Queen) e interagiscono tra loro utilizzando un'interfaccia (con un metodo chiamato processo).

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

Al momento sono bloccato su processActors() metodo dentro WorkerAnt.(È quasi in fondo alla pagina.)

Il codice attuale è il seguente:

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

L'errore che ottengo è il seguente.

Impossibile trovare il simbolo simbolo:processo del metodo(WorkerAnt)

È stato utile?

Soluzione

Seguendo il compito collegato, Actor non ha un process(WorkerAnt) metodo.

Questo invece fa parte del Processable interfaccia (e quindi Food).

In quanto tale, assicurati che il tuo Actor è un Actor implementazione Processable (ad esempio A Food).

Idealmente cambieresti il ​​tuo processActors(ArrayList<Actor> actors) metodo per essere qualcosa di simile processProcessables(ArrayList<Processable> processables).

Tuttavia, vedo nel compito che sei tenuto a implementare a processActors(ArrayList<Actor> actors) quindi non puoi davvero farlo (anche se lo definirei un cattivo design - è come avere un metodo divide(object, object) invece di divide(double, double)).

Per capire perché è un cattivo design, dice il compito

Attori del processo:Ogni attore negli attori deve chiamare il suo metodo di processo.

Tranne Actornon ho process metodi - Processablelo faccio, e Actore non lo sono Processable.

In ogni caso, dovrai accontentarti del fatto che te ne aspetti qualcuno Actordeve essere Processables e fai qualcosa del genere:

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

Tuttavia, dovresti averlo capito dal compito:

Un attore potrebbe essere un Queenant, una torta, un biscotto o un lavoratore.Senza l'interfaccia processabile, i processi dovrebbero determinare il tipo di attore e quindi abbattere il riferimento dell'attore prima di effettuare la chiamata al processo.Ma, dal momento che ciascuna di queste classi implementa elaborabili, i processactor devono solo lanciare l'attore in elaborazione prima della chiamata.Questa elaborazione polimorfica è consentita perché il processo contiene il metodo astratto del processo.Java Runt Time Environment (JRE) determina il tipo effettivo di oggetto in fase di esecuzione e chiama il metodo di processo appropriato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top