2010-06-23 14 views
7

In Java, ho una classe come questa:scala equivalente di java campo pubblico

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 

classe padre "Proprietà" utilizza la riflessione per cercare tutti i campi pubblici in sé, e riempie le variabili con valori come necessario.

Come estendere le proprietà in scala? L'utilizzo di var prop1:StringProperty ... non funziona, suppongo a causa di come scala converte i campi privati ​​per ottenere ... impostare ... metodi di tipo.

risposta

6

Scala contrassegna il campo come privato, ma genera metodi di accesso per impostare e ottenere il suo valore. Se si desidera utilizzare il reflection per fare ciò, è possibile farlo nel modo descritto: here

+0

Ho visto anche questo post, ma sfortunatamente non funzionerà ... il riflesso si verifica nella classe genitore Proprietà, che è scritto in linguaggio java e non posso cambiare quel codice sorgente. – user85116

+0

Ho paura che non ci sia molto che tu possa fare, Scala non emette campi pubblici nel bytecode generato, quindi il modo in cui la classe Properties fa il reflection, non funzionerà per il tuo codice Scala. –