2010-06-23 16 views
7

w Javie, mam klasa tak:scala odpowiednik java dziedzinie publicznej

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 

klasa dominująca „Właściwości” używa refleksji szukać wszystkich dziedzinach publicznych w sobie, i wypełnia zmienne o wartościach jak potrzebne.

Jak mogę rozszerzyć właściwości w scala? Korzystanie z var prop1:StringProperty ... nie działa, zakładam, ze względu na to, jak scala przekształca prywatne pola, aby uzyskać ... ustawione ... metody typu.

Odpowiedz

6

Scala oznacza to pole jako prywatne, ale generuje metody dostępowe do ustawienia i uzyskania jego wartości. Jeśli chcesz użyć odbicia, aby to zrobić, możesz to zrobić w sposób opisany: here

+0

Widziałem to również, ale niestety to nie zadziała ... odbicie występuje w klasie rodzica właściwości, które jest napisany w języku Java i nie mogę zmienić tego kodu źródłowego. – user85116

+0

Obawiam się, że niewiele można wtedy zrobić, Scala nie emituje pól publicznych w wygenerowanym kodzie bajtowym, więc sposób, w jaki klasa Properties dokonuje odbicia, nie będzie działał dla twojego kodu Scala. –