Ну, вопрос имеет своего рода неправильное предварительное условие (как я только что понял) - мы можем разделить Serializer
на сериализатор и десериализатор. Очевидно, что когда у меня есть экземпляр V
, мой вариант использования - сериализация , и для него не требуется V
в качестве возвращаемого типа. Таким образом
trait Serializer { def save(os: OutputStream): Unit }
будет достаточно, и любой тип может смешать это. И сделать:
def testSer[V](os: OutputStream, v: V): Unit = v match {
case s: Serializer => s.save(os)
case _ => new ObjectOutputStream(os).writeObject(v)
}
А для десериализации мы бы либо предоставили десериализатор вместе с конструкцией Ref[V]
, либо использовали бы поиск классов через ObjectInputStream
.