2010-05-10 2 views

Antwort

42

Dies liegt daran, MyEnum ein Objekt und Objekte sind Singletons. Es ist nicht möglich, Singletons als Argumente für Fallklassen zu übergeben, da dies bedeuten würde, dass es mehr als eine Instanz dieses Objekts gibt.

Wenn Sie einen Wert von MyEnum (dh ein Aufzählungswert) übergeben möchten verwenden MyEnum.Value:

case class XY(enum: MyEnum.Value) 

object MyEnum extends Enumeration { val OP1, OP2 = Value } 

Danach Sie MyEnum verwenden können, wie erwartet:

val x = XY(MyEnum.OP1) 

By the way: A Das allgemeine Muster besteht darin, einen Typalias zu definieren, so dass Sie den Code ein wenig anpassen können (z. B. MyEnum anstelle von MyEnum.Value und OP1 anstelle von MyEnum.OP1):

object MyEnum extends Enumeration { 
    type MyEnum = Value 
    val OP1, OP2 = Value 
} 

import MyEnum._ 

case class XY(enum: MyEnum) 

class C { 
    val x = XY(OP1) 
} 
+0

Großartig ich neu da war ein Weg! – user21845

Verwandte Themen