Видимость свойств в классе Scala - PullRequest
2 голосов
/ 10 июня 2010

Я определил свойство в конструкторе моего класса следующим образом:

class Step(val message:String = "")

Когда я пытаюсь получить доступ к значению сообщения из кода Java, у меня появляется ошибка видимости. Почему?

Ответы [ 4 ]

1 голос
/ 05 октября 2010

Я предполагаю, что в коде Java вы пытаетесь получить доступ к полю с помощью step.message.Действительно, такое поле есть, и оно частное.Вот почему вы получаете ошибку видимости.Когда вы объявляете поля 'val' в Scala, компилятор генерирует метод поля и метода доступа.Так что в Java вы должны использовать step.message()

1 голос
/ 10 июня 2010

Если вы добавите аннотацию @ scala.reflect.BeanProperty, вы получите «автоматический» get и set методов

См. http://www.scala -lang.org / document / files / api / scala / refle / BeanProperty.html

scala> class Step(@scala.reflect.BeanProperty val  message:String )
defined class Step

scala> val s = new Step("asdf")
s: Step = Step@71e13a2c

scala> s.message
res6: String = asdf

scala> s.getMessage
res10: String = asdf
1 голос
/ 10 июня 2010

Код правильный, в этом случае сообщение должно быть публичным, но по какой-то причине это не так. Таким образом, в качестве WO вы можете сделать его закрытым (просто отбросить «val») и найти способ создать метод получения для этого значения:

class Step(message: String = ""){
  def getMessage() = message  
}

Или:

class Step(@scala.reflect.BeanProperty message: String = "")

и компилировать:

> scalac -cp . Step.scala

Затем создайте вызывающий класс Java:

public class SomeClass{
  public static void main(String[] args) {
    Step step = new Step("hello");
    System.out.println(" " + step.getMessage());
  }
}

Затем скомпилируйте и запустите:

> javac -cp . SomeClass.java
> java -cp "/home/olle/scala-2.8.0.Beta1-prerelease/lib/scala-library.jar:." SomeClass
hello
>
0 голосов
/ 10 июня 2010

Вы пробовали использовать getMessage()? Возможно, scala генерирует метод доступа.

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