Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么AKKA TypedActor类有两个具有相同签名的方法?_Java_Akka - Fatal编程技术网

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)
不起作用,它遵循的是官方文件: