我试图将扩展方法添加到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)' –