Local variable objectCheck defined in an enclosing scope must be final or effectively final

nchristoph

Erfahrenes Mitglied
Hallo,

ich schreibe gerade an einer Funktion für ein Spiel um Entfernung zu einem Object zu überprüfen.

Code:
  public boolean checkForObject(int distance, SWGObject value ){
     boolean objectCheck = false;
     SWGObject object = core.objectService.getObject(((SWGObject) value).getObjectID());
     core.simulationService.get(object.getPlanet(), object.getWorldPosition().x, object.getWorldPosition().z, distance).stream().forEach((objecta) -> {
       if (object instanceof BuildingObject)
         objectCheck = true;
       }
     );
     return objectCheck;
   }

Ich erhalte jetzt allerdings folgende Meldung in Eclipse
Local variable objectCheck defined in an enclosing scope must be final or effectively final

Beziehen tut sich die Fehlermeldung auf folgende Zeilen
Code:
       if (object instanceof BuildingObject)
         objectCheck = true;

Was mach ich falsch??

//EDIT: gibt es keinen Java Tag im neuen Forum??
 

saftmeister

Nutze den Saft!
Wie wäre denn diese Ansatz:

Java:
  public boolean checkForObject(int distance, SWGObject value ){
     SWGObject object = core.objectService.getObject(((SWGObject) value).getObjectID());
     core.simulationService.get(object.getPlanet(), object.getWorldPosition().x, object.getWorldPosition().z, distance).stream().forEach((objecta) -> {
       if (object instanceof BuildingObject)
         return true;
       }
     );
     return false;
   }
 

nchristoph

Erfahrenes Mitglied
Jetzt krieg ich den Fehler, das void keinen Rückgabewert haben darf. Buildingobject ist aber in der Engine verankert und ich hab da keinen Zugriff drauf.
 

saftmeister

Nutze den Saft!
Ich hab mich mit Lambdas überhaupt noch nicht tiefer beschäftigt, aber ich sehe gerade, dass du in der foreach objecta definiert hast, innerhalb des Ausdrucks aber auf object zugreifst. Ich muss mich damit echt mal beschäftigen.
 

nchristoph

Erfahrenes Mitglied
Ich hab das selber jetzt erst gesehen.

Meine aktuelle Funktion sieht so aus:

Java:
  public boolean checkForObject(int distance, SWGObject value ){
     core.simulationService.get(value.getPlanet(), value.getWorldPosition().x, value.getWorldPosition().z, distance).stream().forEach((objecta) -> {
       if (objecta instanceof BuildingObject)
      return true;
       }
     );
     return false;
   }

Das ganze funktioniert so:

Simulationserver nimmt Anhang der Daten, getWorldpositionm distance alle Objecte in der Umgebung war und speichert es in Objecta

Wenn objecta jetzt aber ein Buildingobject sein sollte, soll er true retourgeben damit ich in einem Pythonscript darauf zurückgreifen kann.

Ich bin absoluter Javanoob, hab mir den Code mittels Search und Try zusammengeschraubt und er funktioniert, ausser die If Abfrage eben.