給定一個具體類特定性狀匿名子束縛
trait Trt {
val x: Int
}
class C extends Trt {
val x: Int = 3
}
我想,以創建一個匿名類的參數類型的對象覆蓋屬性x
abstract class SomeClass[T <: Trt : ClassTag] {
def f: Unit = {
val original = new C
//Is this even possible?
val withOverridenX = new T { override val x = 42}
assert(original.x != withOverridenX.x)
}
}
的問題是,編譯器不斷報告以下錯誤:
>> Error:(26, 35) class type required but T found
實例化匿名類擴展參數類型類甚至可能嗎?
我知道問題是,T
是一個類型,而不是一個類,我想知道是否也許,由於ClassTag界限的情況下,它可以實例化withOverridenX
。
的[可能重複爲什麼\'性狀t; C類; class X extends(C with T)''不能被編譯?](http://stackoverflow.com/questions/25960083/why-trait-t-class-c-class-x-extends-c-with- t-can-be-compiled) – sjrd
@sjrd是否有任何方法可以(例如使用ClassTag)實例化參數類型的匿名類(是的,我知道它是一種類型),在運行時提供類信息,不知何故,使用它? –
不,沒有辦法做到這一點,即使使用「ClassTag」。你會需要一個'TypeTag'和編譯時反射(宏)來做到這一點,我想(我不完全知道如何)。 – sjrd