タイプに拡張メソッドを追加しようとし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
ますか? 私は絶対におかしなことをしようとしていますか??