java - 这两个定义之间的功能区别是什么?
问题描述
// in PingPongMessage.java
public class PingPong {
public static final class Ping { }
}
// in PingActor.java
public class PingActor extends AbstractBehavior<PingPong.Ping> {
public static Behavior<PingPong.Ping> create() {
return Behaviors.setup(context -> new PingActor(context));
}
private PingActor(ActorContext<PingPong.Ping> context){
super(context);
}
@Override
public Receive<PingPong.Ping> createReceive() {
return newReceiveBuilder().onMessage(PingPong.Ping.class, this::onPingMsg).build();
}
private Behavior<PingPong.Ping> onPingMsg() {
System.out.println("Ping!");
return this;
}
}
对比
// in PingActor.java
public class PingActor extends AbstractBehavior<PingActor.Ping>{
public static final class Ping {
}
public static Behavior<Ping> create() {
return Behaviors.setup(context -> new PingActor(context));
}
private PingActor(ActorContext<Ping> context){
super(context);
}
@Override
public Receive<Ping> createReceive() {
return newReceiveBuilder()
.onMessage(Ping.class, this::onPingMessage).build();
}
private Behavior<Ping> onPingMessage(Ping message){
System.out.println("Ping!");
return this;
}
}
我试图了解这两种情况之间的Ping
关系PingActor
。在我看来,两者都在做同样的事情,但在一种情况下PingPong.Ping
是在内部定义的PingActor
,在另一种情况下PingPong
是在它之外的另一个类。显然它们是不一样的,因为第二个例子似乎可以编译,但第一个没有。
编译器错误 -
Inferred type 'M' for type parameter 'M' is not within its bound; should extend 'com.lightbend.akka.sample.PingPong.Ping
见于Receive<PingPong.Ping> createReceive()
解决方案
你不能在 PingPongMessage.java 中有一个公共类“PingPong”它们不匹配
推荐阅读
- python - 在 Python argparse 中的同一参数中存储互斥选项的值
- spring-boot - 如何在 JUnit5 中将参数传递给扩展类构造函数
- javascript - 使用 jQuery 使用右/左箭头键导航幻灯片
- java - 我不明白为什么 mkdir() 返回 false?
- ios - UITableView 单元格自动尺寸在第一次尝试中工作但在之后不起作用
- entity-framework-core - Entity Framework Core,DB生成后运行sql的最佳方式是什么
- java - 为什么 spring-boot-data-jdbc 查询方法需要 No Args 构造函数
- jenkins - Jenkins构建运行后,有什么方法可以将文件存储或更新到One-drive?
- mysql - 如何在nodejs中读取varbinary数据类型值
- cassandra-3.0 - Cassandra 在一致性 LOCAL_ONE 读取查询期间超时(等待修复不一致副本时超时)