Object cannot be converted to Custom Class in Lampda Expression

Erwin82a

Neues Mitglied
Hallo. Ich war lange nicht mehr im Java-Forum. Ich habe einen komischen Compiler-Fehler den ich nicht erklären kann. Der Code ist hier:

Java:
    protected BehaviorBuilder<Message> getStartBehaviorBuilder() {
        return Behaviors.receive(Message.class)//
                .onMessage(JavafxPaneInitialStateMessage.class, this::onInitialState)//
                .onMessage(JavafxPaneErrorSetupControllerMessage.class, this::onErrorState)//
                .onMessage(Message.class, this::stashOtherCommand)//
        ;
    }

Der Fehler kommt aus Zeile 4:

Code:
incompatible types: java.lang.Object cannot be converted to com.anrisoftware.anlopencl.jmeapp.actors.AbstractJavafxPaneActor.JavafxPaneErrorSetupControllerMessage

Das komische ist, dass der Fehler nur in dieser Zeile erscheint.

JavafxPaneErrorSetupControllerMessage ist definiert als:

Java:
    @RequiredArgsConstructor
    @ToString(callSuper = true)
    protected static class JavafxPaneErrorSetupControllerMessage extends Message {

        public final ActorContext<Message> context;

        public final Throwable cause;
    }

Java:
        @ToString
    public static class Message {
    }

Wenn ich die Methode ändere und Object als Parameter verwende, dann ist der Error weg:

Java:
    private Behavior<Message> onErrorState(Object m) {
        var mm = (JavafxPaneErrorSetupControllerMessage) m;
        log.debug("onErrorState {}", mm);
        log.error("Error setup controller", mm.cause);
        return Behaviors.stopped();
    }

Mein Problem ist, dass ich diesen Pattern überall verwende und nirgendwo Fehler erscheinen.

Zum Beispiel hier:

Java:
    @Override
    protected BehaviorBuilder<Message> doActivate(JavafxPaneInitialStateMessage<AboutDialogController> m) {
        log.debug("doActivate {}", m);
        runFxThread(() -> {
            controller.updateLocale(gsp.get(), appImages, appTexts);
            controller.initializeListeners(actor.get(), onp.get());
            pane.setPrefSize(camera.getWidth() - 100, camera.getHeight() - 100);
        });
        tellLocalizeControlsSelf(gsp.get());
        return Behaviors.receive(Message.class)//
                .onMessage(LocalizeControlsMessage.class, this::onLocalizeControls)//
                .onMessage(AboutDialogOpenMessage.class, this::onAboutDialogOpenMessage)//
                .onMessage(AboutDialogCloseTriggeredMessage.class, this::onAboutDialogCloseTriggered)//
        ;
    }

Den gesamten Code kann man sich hier runterladen:

 

Neue Themen


Zurück
Oben