Java 为什么AKKA TypedActor类有两个具有相同签名的方法?
在使用Java 为什么AKKA TypedActor类有两个具有相同签名的方法?,java,akka,Java,Akka,在使用TypedActor.get(system)intellij拼写错误“不明确的方法调用”时,此处system属于ActorSystem类型。我发现在TypedActor类文件的反编译源代码中有两种方法具有相同的签名: 据我所知,在Java中,两个方法不可能具有相同的签名,那么这里出了什么问题?调用TypedActor.get(ActorSystem系统)方法的正确方法是什么 我使用的AKKA版本是2.5.11,jar文件是AKKA-actor_2.13.0-M3 编辑:根据@johana
TypedActor.get(system)
intellij拼写错误“不明确的方法调用”时,此处system
属于ActorSystem
类型。我发现在TypedActor
类文件的反编译源代码中有两种方法具有相同的签名:
据我所知,在Java中,两个方法不可能具有相同的签名,那么这里出了什么问题?调用TypedActor.get(ActorSystem系统)
方法的正确方法是什么
我使用的AKKA版本是2.5.11,jar文件是AKKA-actor_2.13.0-M3 编辑:根据@johanandren的说法,这是一个bug,现在已经修复了 你可以用
TypedActor$.MODULE$.get(系统)
。这是因为Scala对象转换为单例类的方式
Scala对象
TypedActor
实际上被转换为类TypedActor$
,其单实例名为MODULE$
。这是因为JVM字节码实际上不支持Scala的单例对象,所以很多Scala名称都有争议,很难从Java访问。编辑:根据@johanandren的说法,这是一个bug,现在已经修复
你可以用
TypedActor$.MODULE$.get(系统)
。这是因为Scala对象转换为单例类的方式
Scala对象
TypedActor
实际上被转换为类TypedActor$
,其单实例名为MODULE$
。这是因为JVM字节码实际上不支持Scala的单例对象,所以很多Scala名称都有争议,很难从Java访问。这是由Scala编译器中的问题()它已经被修复,因此升级到更新的Akka版本应该会修复它。这是一个由Scala编译器中的问题引起的错误(),它已经被修复,因此升级到更新的Akka版本应该会修复它。参数system
的类型已经是ActorSystem
,定义为ActorSystem system=ActorSystem.create(“TestSystem”)
,混淆之处在于TypedActor中有两种方法get(ActorSystem系统)@用户反编译的Java代码显示有两个方法具有完全相同的签名,请参见上面的屏幕截图,因为我不知道Scala,我不确定原始Scala代码中是否如此,可能这只是反编译器的问题。参数system
已经是ActorSystem
类型,定义为ActorSystem system=ActorSystem.create(“TestSystem”)
,混淆之处在于TypedActor中有两种方法get(ActorSystem系统)@用户反编译的Java代码显示有两种方法具有完全相同的签名,请参见上面的屏幕截图,因为我不知道Scala我不确定原始Scala代码中是否存在这种情况,可能这只是反编译器的问题。尽管看起来像是黑客,TypedActor$.MODULE$.get(system)
do可以工作,不需要铸造。@Yulin你可能应该在AkkaI中使用Scala,我在Akka中使用Java,因为我不知道Scala。另一点我不明白的是,类名以$符号结尾,我发现很多类有两个版本,一个名为xxx
,另一个名为xxx$
,据我所知,美元符号仅用于内部类,如OuterClazz$InnerClazz
或OuterClazz$3
,因此不会出现在末尾。顺便说一句,原来的TypedActor.get(系统)
不起作用,它遵循的是官方文件:虽然看起来像是一个黑客,TypedActor$.MODULE$.get(系统)
do起作用,不需要强制转换。@Yulin你应该用Scala和AkkaI一起使用我用Java和Akka,因为我不知道Scala。另一点我不明白的是,类名以$符号结尾,我发现很多类有两个版本,一个名为xxx
,另一个名为xxx$
,据我所知,美元符号仅用于内部类,如OuterClazz$InnerClazz
或OuterClazz$3
,因此不会出现在末尾。顺便说一句,原来的TypedActor.get(system)
不起作用,它遵循的是官方文件: