タイプに拡張メソッドを追加しようとし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 であるため、コンパイルもすべきではないようです。Serializeableの内側の型になんらかの強制がありlnますか? 私は絶対におかしなことをしようとしていますか??