是否有办法确保类型在编译时是可序列化的



我经常使用Spark,如果编译器能够确保类型是可序列化的,那将为我节省很多时间。

可能是一个类型类?

def foo[T: IsSerializable](t: T) = {
  // do stuff requiring T to be serializable
}

仅仅约束T <: Serializable是不够的。它仍然可能在运行时失败。单元测试是一个很好的替代,但是你仍然可以忘记它们,特别是在与大型团队一起工作时。

我认为如果不对类型进行密封,在编译时这可能是不可能做到的。

是的,这是可能的,但不是以你希望的方式。您的类型类IsSerializable可以提供一种机制,将您的T转换为保证为Serializable的类型的值,然后再返回

trait IsSerializable[T] {
  def toSerializable(t: T): String
  def fromSerializable(s: String): Option[T]
}

但是,当然,这只是另一种基于类型类的序列化机制,使JVM序列化的使用变得多余。

你最好的做法是游说Spark直接支持基于类型类的序列化。

最新更新