Расширение универсальных Serializables с неявными преобразованиями
Я пытаюсь добавить методы расширения 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
? Я пытаюсь сделать что-то абсолютно помешанное??
1 ответ
List
продолжается Serializable
, Так List[A].isSer(String)
определено; тип A
не имеет значения.
Serializable
это просто интерфейс маркера, используемый для указания того, предназначен ли класс для сериализации. Сможете ли вы на самом деле сериализовать объект, зависит от того, будет ли сериализуем весь граф транзитивных объектов с корнем в этом объекте. Ваш ln
не будет сериализации во время выполнения с NotSerializableException
потому что он содержит несериализуемые типы. См. Javadoc для java.lang.Serializable (который scala.Serializable
расширяется) для более подробной информации.