я определил свойство в конструкторе моего класса следующим образом:Видимость свойств в классе
class Step(val message:String = "")
При попытке доступа к сообщение значение из Java кода у получаю ошибку visbility. Зачем?
я определил свойство в конструкторе моего класса следующим образом:Видимость свойств в классе
class Step(val message:String = "")
При попытке доступа к сообщение значение из Java кода у получаю ошибку visbility. Зачем?
Вы пытались использовать getMessage()
? Возможно, scala генерирует аксессор.
Нет, я уже пробовал, но он не работает – barroco
Если добавить @ scala.reflect.BeanProperty annontation вы получите "автомат" получить и набор методы
См http://www.scala-lang.org/docu/files/api/scala/reflect/BeanProperty.html
scala> class Step(@scala.reflect.BeanProperty val message:String)
defined class Step
scala> val s = new Step("asdf")
s: Step = [email protected]
scala> s.message
res6: String = asdf
scala> s.getMessage
res10: String = asdf
код правилен, сообщение должно быть публичным в этом случае, но по какой-то причине это не так. Так, как 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
>
Я думаю, что в коде Java вы пытаетесь получить доступ к области с step.message
. Действительно, есть такое поле, и оно личное. Вот почему вы получаете ошибку видимости. Когда вы объявляете поля «val» в Scala, компилятор генерирует метод поля и доступа. Поэтому в java вы должны использовать step.message()
Возможно, ошибка, связанная с параметрами по умолчанию и названными. –