我試圖將擴展方法添加到Serializable
類型,並且在我對該類的理解中似乎存在一個漏洞。這裏是我想要做的基本的一個片段:用隱式轉換擴展泛型可序列化
class YesSer extends Serializable
class NoSer
implicit class SerOps[S <: Serializable](s: S) {
def isSer(msg: String) = {
println(msg)
assert(s.isInstanceOf[Serializable])
}
}
val n = new NoSer
val ln = List(new NoSer, new NoSer)
val y = new YesSer
val ly = List(new YesSer, new YesSer)
// n.isSer("non Serializable")
ln.isSer("list of non Serializable")
y.isSer("Serializable")
ly.isSer("list of Serializable")
List
延伸Serializable
很明顯,我行n.isSer
將無法編譯,但它似乎也ln.isSer
也不該不會編譯,因爲它的「內部」類型是NoSer。 ln
的內部類型的Serializeable
是否有某種強制?我是否試圖做一些絕對瘋狂的事?
隱式轉換可以更改爲僅採集可序列化集合,但是然後您的'y.isSer(「Serializable」)用例不會編譯,並且您不能同時擁有兩個隱式轉換器,因爲它變得模糊不清隱含的,編譯器會拒絕。 – jwvh
我也對此進行了嘗試,並且能夠在同一時間範圍內進行幾次隱式自由轉換 隱式自定義serToSerops [S <:可序列化](s:S)=新SerOps(s)'隱式自定義serToSerOPsC [C [_] <:Serializable](c:C [_])= new SerOps(c)' 'implicit def serToSeropsCS [C [_] <:Serializable,S <:Serializable] )= new SerOps(c)' –