Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command)

Hey, ich habe eine Liste gegeben, in der ich mehrere Methodenaufrufe (hier Commands genannt) gespeichert habe.
[CODE lang="java" title="Lambda Expression"]//Hier wird eine Klasse Robot generiert. In der Klasse ist eine Liste, die die Commands
//enthält und in dieser Liste werden Methoden, die in der Klasse Robot implementiert
//sind, beschrieben.
public static void main(String[] args) {

Robot test = new Robot("Pengu", Math.toRadians(90), 1);
test.setProgram(robot -> {
List<Command> commands = new ArrayList<>();

commands.add(r -> r.go(0.1));
commands.add(r -> r.go(0.2));

return commands;
});
}[/CODE]

In der Klasse Robot habe ich nun eine Methode, die die Commands in der Liste, die todo heißt, ausführt.
[CODE lang="java" title="Klasse Robot"]public class Robot implements Command{
private List<Command> todo = new LinkedList<>();

/*...*/

//die Befehle aus der Liste werden ausgeführt
public void act(){
while(todo.peek() != null){
if(todo.execute(this).execute(this) == false) {
break;
}
}
}
/// Pre-programmed Commands
public boolean go(double distance) {
//step can be negative if the penguin walks backwards
double sign = Math.signum(distance);
distance = Math.abs(distance);
//penguin walks, each step being 0.2m
while (distance > 0) {
position.moveBy(sign * Math.min(distance, 0.2), direction);
world.resolveCollision(this, position);
distance -= 0.2;
}
System.out.println("go in robot executed!");
return true;
}
@Override
public boolean execute(Robot robot) {
//hier muss ich execute implementieren, sodass das gespeicherte Befehl go aus der
//Liste todo entfernt wird und auf robot ausgeführt wird.
return false;
}
}[/CODE]

Nun wäre meine Frage, ob ihr Vorschläge habt, wie ich execute(Robot robot) implementieren könnte.
 
Zuletzt bearbeitet:
Das sieht gruselig aus.

Java:
public class Robot implements Command
Warum? Ist ein Robot ein Command? Kann also ein Robot sich selbst ausführen mit sich selbst? Das sieht falsch.

Code:
            if(todo.execute(this).execute(this) == false)
Das kompiliert doch gar nicht? Warum steht da da 2x execute.this?

Beschreib erst mal - losgelöst von Java - was du überhaupt tun willst. Momentan ist das leider Gottes Kraut und Rüben.
 
Robot implementiert Command nur wegen der Funktion execute. Das öffentliche Interface Command deklariert eine einzelne Methode boolean execute, die einen Befehl/Command für den angegebenen Roboter ausführt und einen booleschen Wert zurückgibt. Wenn true zurückgegeben wird, bedeutet das, dass der Roboter den nächsten Befehl in der todo-Warteschlange sofort ausführen kann, ansonsten macht er nichts.

Sorry das mit dem 2mal execute ist ein schreibfehler ^^.

Also die Commands in der Liste werden so in der Liste gespeichert

[CODE lang="java" title="Listenerzeugung"] Robot test = new Robot("Pengu", Math.toRadians(90), 1);
test.setProgram(robot -> {
List<Command> commands = new ArrayList<>();

commands.add(r -> r.go(0.1));
commands.add(r -> r.go(0.2));

return commands;
});

//Das befindet sich in der main Methode[/CODE]

Diese Liste hat also meine Befehle für meinen Roboter gespeichert.
Nun führe ich aus der Klasse Roboter die Methode act() auf, die auf der Liste todo alle Befehle mit execute(Robot) ausführt unzwar wie oben beschrieben ist.(Nach dem Ausführen werden die Werte aus der Liste todo entfernt.)
Alle Befehle geben einen booleschen Wert aus. Falls der Befehl ausführbar ist gibt er true zurück und sonst false.
Sollte also bei execute(Robot) nun false rauskommen, bricht act() ab.
 
Das sieht gruselig aus.

Java:
public class Robot implements Command
Warum? Ist ein Robot ein Command? Kann also ein Robot sich selbst ausführen mit sich selbst? Das sieht falsch.

Code:
            if(todo.execute(this).execute(this) == false)
Das kompiliert doch gar nicht? Warum steht da da 2x execute.this?

Beschreib erst mal - losgelöst von Java - was du überhaupt tun willst. Momentan ist das leider Gottes Kraut und Rüben.
siehe oben
 

Zurück
Oben