Akka — причина: несовместимые типы: Behavior невозможно преобразовать в Behavior. ⇐ JAVA
Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Akka — причина: несовместимые типы: Behavior невозможно преобразовать в Behavior.

Сообщение Anonymous »

У меня есть OrderManagerActor, который принимает сообщения от классов, реализующих интерфейс Message.
Этот интерфейс реализован следующими классами CreateOrderMessage, DeleteOrderMessage, UpdateOrderStatusMessage.
При попытке зарегистрировать метод createReceive() в OrderManagerActor
@Override
public Receive createReceive() {
return ReceiveBuilder.create()
.onMessage(CreateOrderMessage.class, this::createOrder)
.build();
}

Я получаю следующее:
причина: несовместимые типы: Behavior невозможно преобразовать в Behavior
Ну, я могу сделать так, чтобы все сообщения, которые получает мой Актер, были Объектами, но мне кажется, что это будет не совсем правильно
Класс OrderManagerActor
package actor;

import akka.actor.typed.Behavior;
import akka.actor.typed.javadsl.*;
import message.Message;
import message.impl.CreateOrderMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class OrderManagerActor extends AbstractBehavior {
private final Logger loggerFactory = LoggerFactory.getLogger(OrderManagerActor.class);

public OrderManagerActor(ActorContext context) {
super(context);
}

@Override
public Receive createReceive() {
return ReceiveBuilder.create()
.onMessage(CreateOrderMessage.class, this::createOrder)
.build();
}

private Behavior createOrder(CreateOrderMessage createOrderMessage) {
loggerFactory.info(createOrderMessage.toString());
return this;
}

public static Behavior createBehavior() {
return Behaviors.setup(OrderManagerActor::new);
}
}

Интерфейс сообщений:
package message;

public interface Message {
}

Реализация интерфейса сообщений:
package message.impl;

import message.Message;

public class CreateOrderMessage implements Message {
private String id;

public CreateOrderMessage(String id) {
this.id = id;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

ОБНОВЛЕНИЕ!

Я исправил это, нужно было использовать построитель newReceiveBuilder.
@Override
public Receive createReceive() {
return ReceiveBuilder.create()
.onMessage(CreateOrderMessage.class, this::createOrder)
.build();
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... e-to-behav
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение