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方法的谓词中使用它