Sie instanziieren sie nicht wirklich. Wenn Sie eine Parallele zu Java ziehen, lassen Sie uns weiter darauf eingehen. Sie können in Java eine Anonyme Klasse aus einer abstrakten Klasse oder einer Schnittstelle erstellen. Es ist fast das gleiche in Scala:
scala> trait A
defined trait A
scala> new A {}
res0: A = [email protected]
Beachten Sie, dass die geschweiften Klammern obligatorisch sind, wenn Sie ein Objekt aus einem Merkmal erstellen. Zum Beispiel yon nicht tun können:
scala> new A
<console>:9: error: trait A is abstract; cannot be instantiated
new A
^
Während es wäre perfekt für eine Klasse funktioniert:
scala> class B
defined class B
scala> new B
res2: B = [email protected]
Natürlich, wenn einige Elemente in Ihrer Eigenschaft nicht umgesetzt werden, müssen Sie sie implementieren, wenn Sie erstellen das Objekt:
scala> trait C {def foo: Int}
defined trait C
scala> new C {}
<console>:9: error: object creation impossible, since method foo in trait C of type => Int is not defined
new C {}
^
scala> new C {def foo = 42}
res4: C = [email protected]
Java: 'Schnittstelle Bar {}; Bar bar = new Bar() {}; ' – soc