Почему класс AKKA TypedActor имеет два метода с одинаковой сигнатурой? - PullRequest
1 голос
/ 15 апреля 2020

При использовании TypedActor.get(system) intellij пишется ошибка «неоднозначный вызов метода», здесь system имеет тип ActorSystem. Я обнаружил в декомпилированном исходном коде файла класса TypedActor два метода с одинаковой сигнатурой: snapshot

Насколько мне известно, два метода не могут иметь та же подпись в Java, так что здесь не так? Как правильно вызывать метод TypedActor.get(ActorSystem system)?

Я использую версию AKKA 2.5.11 и файл jar akka-actor_2.13.0-M3.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Это была ошибка, вызванная проблемой в компиляторе Scala (https://github.com/akka/akka/issues/25449), с тех пор она была исправлена, поэтому обновление до более новой версии Akka должно исправить это.

1 голос
/ 15 апреля 2020

РЕДАКТИРОВАТЬ: Согласно @johanandren ниже , это была ошибка, и теперь она исправлена.

Вы можете использовать TypedActor$.MODULE$.get(system). Это происходит из-за того, что Scala объекты превращаются в одноэлементные классы.

A Scala объект TypedActor фактически превращается в класс TypedActor$ с одноэлементным экземпляром, называемым MODULE$. Это связано с тем, что байт-код JVM на самом деле не поддерживает одноэлементные объекты Scala, поэтому множество имен Scala подвергнуто сомнению и к ним трудно получить доступ из Java.

...