2010-06-23 2 views
7

В Java, у меня есть класс, как это:Скала эквивалент Java общественного поля

public class MyClass extends Properties { 
    public StringProperty prop1 = new StringProperty(this, "default value for prop1"); 
    public StringProperty prop2 = new StringProperty(this, "prop2 default val"); 
}//MyClass 

родительского класса «Свойства» использует рефлексию для поиска всех общественных полей само по себе, и заполняет переменные со значениями как необходимо.

Как бы расширить свойства в scala? Использование var prop1:StringProperty ... не работает, я предполагаю, что scala преобразует частные поля, чтобы получить ... set ... type methods.

ответ

6

Scala отмечает это поле как личное, но генерирует методы доступа, чтобы установить и получить его значение. Если вы хотите использовать отражение для этого, вы можете сделать это так, как описано: here

+0

Я тоже видел эту публикацию, но, к сожалению, это не сработает ... отражение происходит в родительском классе свойств, который написан на языке Java, и я не могу изменить этот исходный код. – user85116

+0

Я боюсь, что вы ничего не можете сделать, Scala не генерирует публичные поля в сгенерированном байт-коде, поэтому способ, которым класс свойств делает отражение, не будет работать для вашего кода Scala. –

Смежные вопросы