Java阿卡。如何将演员行为与许多泛型相匹配

Java Akka. How to match actor behavior to the many generics

我是 akka 的初学者,在学习期间我有下一个问题:

例如,我有主要演员向其他两个儿童演员发送消息。 他们都将 return 不同的列表。

    ChildActorA return Optional<List<Entity1>>
    ChildActorB return Optional<List<Entity2>>

如何匹配主角来处理这些响应?

部分演示代码:

    public class MainActor extends AbstractLoggingActor {

        @Override
        public Receive createReceive() {
            return receiveBuilder()
                    .match(Entity1.class, this::onEntity1)
                    .match(Entity2.class, this::onEntity2)
                   //How match to the list of these entities?
                    .match(Optional<List<Entity1>>, this::onList1)
                    .match(Optional<List<Entity2>>, this::onList2)                  
                    .build();
        }
}


private void onEntity1(Entity1 entity1) {
        final ActorRef entity1ChildActor = getContext().actorOf(Entity1ChildActor.props());

        entity1ChildActor.tell("printIt", getSelf());
    }

    private void onEntity2(Entity2 entity2) {
        final ActorRef entity21ChildActor = getContext().actorOf(Entity2ChildActor.props());

        entity2ChildActor.tell("printIt", getSelf());
    }

其中一位童星:

public class Entity1ChildActor extends AbstractLoggingActor {

    @Override
    public Receive createReceive() {
        return receiveBuilder()
                .match(String.class, this::onPrint)
                .build();
    }

    private void onPrint(Entity1 entity1) {
        System.out.println(entity1);

         //Here I want to tell to parent List of something
         //namely Optional<List<Entity1>>
         //How can I match parent behavior? 

         getSender().tell(someOptionalList, getSelf());
    }

    public static Props props(){
        return Props.create(Entity1ChildActor.class);
    }
}

泛型类型参数是一个编译时问题。它们在运行时丢失。它被称为type erasure。 所以在运行时 Optional<List<Entity1>>Optional<List<Entity2>> 都变得简单 Optional 并且无法按类型区分。

但是,您可以创建 2 个具体的 classes 用作消息并封装可选列表并与之匹配。或者,您可以创建 1 个具体 class 并让它在字段中保存实体类型并公开它,以便您可以在 match 方法的谓词中使用它。