Java 爪哇阿卡。如何将参与者行为与许多泛型相匹配

Java 爪哇阿卡。如何将参与者行为与许多泛型相匹配,java,akka,match,actor,Java,Akka,Match,Actor,我是阿克卡的乞丐,在我接受教育期间,我有一个问题: 例如,我有一个主参与者,它向其他两个子参与者发送消息。 它们都将返回不同的列表 ChildActorA return Optional<List<Entity1>> ChildActorB return Optional<List<Entity2>> ChildActorA返回可选 ChildActorB返回可选 我如何匹配主要演员来处理这些反应 一些演示代码: pub

我是阿克卡的乞丐,在我接受教育期间,我有一个问题:

例如,我有一个主参与者,它向其他两个子参与者发送消息。 它们都将返回不同的列表

    ChildActorA return Optional<List<Entity1>>
    ChildActorB return Optional<List<Entity2>>
ChildActorA返回可选
ChildActorB返回可选
我如何匹配主要演员来处理这些反应

一些演示代码:

    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());
    }
公共类MainActor扩展了AbstractLoggingActor{
@凌驾
公共接收createReceive(){
return receiveBuilder()
.match(Entity1.class,this::onEntity1)
.match(Entity2.class,this::onEntity2)
//如何匹配这些实体的列表?
.match(可选,此::onList1)
.match(可选,此::onList2)
.build();
}
}
私有void onEntity1(Entity1 Entity1){
最终ActorRef entity1ChildActor=getContext().actorOf(entity1ChildActor.props());
entity1childatator.tell(“printIt”,getSelf());
}
私有void onEntity2(实体2实体2){
最终ActorRef entity21ChildActor=getContext().actorOf(Entity2ChildActor.props());
entity2childatator.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);
    }
}
公共类Entity1ChildActor扩展了AbstractLoggingActor{
@凌驾
公共接收createReceive(){
return receiveBuilder()
.match(String.class,this::onPrint)
.build();
}
打印时的专用void(Entity1 Entity1){
系统输出打印项次(entity1);
//这里我想告诉家长一些事情的清单
//即可选
//我如何匹配父母的行为?
getSender().tell(someOptionalList,getSelf());
}
公共静态道具道具(){
返回Props.create(Entity1ChildActor.class);
}
}

泛型类型参数是编译时关注的问题。它们在运行时丢失。它叫。 因此,在运行时,
Optional
Optional
都变成了简单的
Optional
,并且按类型无法区分

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