Тип псевдонимов классов Java со статикой - PullRequest
7 голосов
/ 09 февраля 2011

Предположим, MyClass является классом, определенным в Java, и имеет много статических, а также нестатических членов.Я попытался создать псевдоним этого класса (и связанного с ним объекта-компаньона) в объекте Scala MyObject, как показано ниже:

object MyObject {
  import javastuff._
  type MyAlias = MyClass
  val MyAlias = MyClass
}

Scalac жалуется:

error: object MyClass is not a value
val MyAlias = MyClass

Как мне обойти это?Спасибо.

Ответы [ 2 ]

6 голосов
/ 09 февраля 2011

Хотя это работает в чистом Scala для объекта-компаньона класса +, это невозможно для статических методов Java, поскольку они не принадлежат ни одному интерфейсу.

Scala может втеория, создать объект, содержащий делегаты для всех статических методов некоторого класса, но в настоящее время это не делаетсяДля этого также можно написать плагин компилятора, если вы чувствуете себя комфортно при написании плагинов.

Если это не удастся, вам придется либо создать объект, полный делегатов, либо просто выбрать несколько методов и перейти к вишне.их как функции.

0 голосов
/ 28 июля 2016

это невозможно при использовании статических методов Java, поскольку они не принадлежат ни одному интерфейсу.

Обновление через 5 лет: PR 5131 упоминает:

Мы использовали для отключения генерации статических перенаправителей, когда объект имел черту в качестве компаньона, поскольку нельзя было добавить методы с телами в интерфейс в JVM 6.

JVM подняла этоограничение для поддержки методов по умолчанию в интерфейсах, поэтому мы можем снять ограничение и для статических серверов пересылки.

Исправления scala-dev проблема 59

См. коммит 41c9a17 Джейсон Заугг (retronym) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...