Non è, in effetti, una classe anonima! È un inizializzatore anticipato e viene eseguito come parte del costruttore che precede la sua superclasse. Citando la risposta eccellente da another stackoverflow question:
abstract class X {
val name: String
val size = name.size
}
class Y extends {
val name = "class Y"
} with X
Se il codice fosse scritta, invece, come
class Z extends X {
val name = "class Z"
}
quindi un'eccezione di puntatore nullo sarebbe verificato quando Z ottenuto inizializzato, perché la dimensione è inizializzata prima del nome nel normale ordinamento dell'inizializzazione (superclasse prima della lezione).
fonte
2012-10-08 22:01:45
L'esempio fornito non è un tipo strutturale, ma una classe anonima. Non che spieghi perché puoi estenderlo ... –
Proprio così, ho aggiornato il titolo – Eyvind