2012-10-19 20 views
6

Posso passare argomenti al costruttore della classe Scala che non sono memorizzati nella classe stessa? voglio ottenere funzionalità, che in Java potrebbe essere scritto come segue:Parametri locali del costruttore della classe Scala

class A { 
    private final SomethingElse y; 
    public A(Something x) { 
      y = x.derive(this); 
    } 
} 

Vale a dire il costruttore della classe assume un parametro che viene successivamente trasformato in un altro valore usando il riferimento a this. Il parametro viene dimenticato dopo i ritorni del costruttore.

In Scala che posso fare:

class A(x: Something) { 
    val y = x.derive(this) 
} 

ma significa che x viene memorizzato nella classe, che voglio evitare. Poiché il metodo x.derive utilizza il riferimento a this, non è possibile effettuare la trasformazione nell'oggetto associato.

risposta

7

Ma significa che x è memorizzato nella classe, che voglio evitare.

Se non si fa riferimento all'argomento del costruttore, eccetto il costruttore stesso, il campo non verrà creato. Se si fa riferimento a x ad es. in toString(), Scala creerà automaticamente e assegnerà per voi il numero privato val.

Utilizzare javap -c -private A per verificare che tipo di campi vengono effettivamente creati.

BTW si passa this all'interno di un costruttore, il che significa che ottiene un riferimento a un'istanza forse non inizializzata di A. Stai attento!

Problemi correlati