2
我有一個特質EsperClassification定義如下:我該如何反思基於抽象類型變量的基本特徵中的Scalavro聯合類型?
trait EsperClassification {
import com.gensler.scalavro.util.Union
import scala.reflect.runtime.{currentMirror => m}
type EsperEvents
// what I want to do is this, but this fails:
val u = new Union[EsperEvents]
// so that I can do this:
u.memberTypes() foreach { t=> registerType(t.typeSymbol.Name,m.runtimeClass(t))}
private def registerType(name:String, clz: Class[_ <: Any]) = ...
}
這一特性被用作如下:
class EsperEventBus extends ActorEVentBus with EsperClassification {
type EsperEvents = union[Buy] #or [Sell]
… more stuff
}
失敗在聯盟實例化與Scala編譯器抱怨缺少類型標籤。
但是,如果我在混凝土EsperEventBus實例化的聯盟,它工作正常:
trait EsperClassification {
import com.gensler.scalavro.util.Union
import scala.reflect.runtime.{currentMirror => m}
type EsperEvents
def esperEventsUnion: Union[EsperEVents] // abstract!
// this works:
esperEventsUnion.memberTypes() foreach {
t=> registerType(t.typeSymbol.Name,m.runtimeClass(t))}
private def registerType(name:String, clz: Class[_ <: Any]) = ...
}
trait EsperEventBus extends ActorEventBus with EsperClassification {
type EsperEvents = union[Buy] #or [Sell]
def esperEventsUnion = new Union[EsperEvents]
}
我想知道的是是否和如何我可以實例化聯盟的特質本身?
感謝,
弗蘭克