2010-06-10 1 views
2
лестницу

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

class Step(val message:String = "") 

При попытке доступа к сообщение значение из Java кода у получаю ошибку visbility. Зачем?

+0

Возможно, ошибка, связанная с параметрами по умолчанию и названными. –

ответ

0

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

+0

Нет, я уже пробовал, но он не работает – barroco

1

Если добавить @ 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 
+0

В режиме работы работает, но IntelliJ IDEA показывает ошибку. – barroco

+1

@ isola009 Плагин IDE для Scala все еще имеет ошибки, иногда такие вещи случаются. То же самое происходит с плагинами Scala для NetBeans и Eclipse, они также иногда показывают фальшивые ошибки. – Jesper

1

код правилен, сообщение должно быть публичным в этом случае, но по какой-то причине это не так. Так, как 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 
> 
1

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