Могу ли я получить доступ к значению объекта Scala без скобок из Java? - PullRequest
8 голосов
/ 08 декабря 2011

Имеется следующий объект Scala:

object ScalaObject {
    val NAME = "Name"
}

Похоже, что компилятор Scala генерирует метод без параметров для доступа к полю NAME. Однако, когда я пытаюсь получить доступ к этому полю из Java, похоже, что единственный способ получить доступ к этому полю - это метод без параметров, например:

System.out.println(ScalaObject$.MODULE$.NAME());

Есть ли способ заставить компилятор Scala позволить Java получить доступ к val в соответствии с ожидаемой идиомой Java как:

System.out.println(ScalaObject$.MODULE$.NAME);

Ответы [ 2 ]

7 голосов
/ 08 декабря 2011

Строго говоря, ответ - нет, потому что scala генерирует не просто поле, а пару методов для доступа к нему. Однако аннотирование scala val с помощью @scala.reflect.BeanProperty приведет к созданию методов получения и установки в стиле Java.

так что пока вы не сможете сказать (в вашем случае)

ScalaObject$.MODULE$.NAME

Вы сможете сказать

ScalaObject$.MODULE$.getNAME()

Это была бы более похожая на Java идиома, но не та, на которую вы надеялись.

N.B. Я не пробовал @BeanProperty с таким именем в верхнем регистре, поэтому я не уверен, что он на самом деле будет производить.

1 голос
/ 08 декабря 2011

Нет, потому что в байт-коде есть разные инструкции для доступа к полю и вызова метода. Затем вы должны исправить Javac (и вашу подсветку синтаксиса IDE).

...