我经常使用Spark,如果编译器可以确保类型可序列化,它将节省我很多时间.
也许有一个类型?
def foo[T: IsSerializable](t: T) = {
// do stuff requiring T to be serializable
}
Run Code Online (Sandbox Code Playgroud)
限制T <:Serializable是不够的.它可能仍然在运行时失败.单元测试是一个很好的替代品,但你仍然可以忘记它们,特别是在与大团队合作时.
我认为如果没有密封类型,这在编译时可能是不可能的.
是的,这是可能的,但不是以您希望的方式。您的类型类IsSerializable可以提供一种机制,将您的类型转换为保证可以再次转换T的类型值,Serializable
trait IsSerializable[T] {
def toSerializable(t: T): String
def fromSerializable(s: String): Option[T]
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,这本身只是一种基于类型类的序列化机制的替代方案,使得 JVM 序列化的使用变得多余。
您最好的做法是游说 Spark 直接支持基于类型类的序列化。