部分原因是我无法在 Kotlin 中创建没有参数的数据类,我object
在这些情况下使用 s,例如
sealed class Node {
object Leaf : Node()
data class Branch(val left:Node, val right:Node) : Node()
}
问题是,有时,我最终会得到Leaf
该类的多个实例。显然这通常不应该发生,但是在使用某些框架和某些测试用例进行序列化和反序列化时会发生。
现在,您可能会争辩说我应该修复这些情况,但很难知道它们可能在哪里,而且修改框架的反序列化语义并不总是可能或可取的。
因此,我希望我的 s 的所有实例都object
充当相同的值,就像无参数data class
(或case class
Scala 中的无参数)一样。
到目前为止,我最好的解决方案如下,包含在object
我创建的每个可能遇到此问题的文件中:
object SaneLeaf {
override fun hashCode() = javaClass.hashCode()
override fun equals(other: Any?) = other?.javaClass == javaClass
}
显然,这是冗长且容易出错的,因为似乎不可能将这些实现抽象为接口。超类可以在对象不需要扩展另一个类的情况下工作,但通常情况并非如此。
或者,我可以创建一个带有Nothing
参数的数据类。但这似乎更像是一种黑客行为。
其他人是如何处理这个问题的?是否有计划向遵循这些类的假定语义的对象添加hashCode
和实现(所有实例都应该相等/相同的 hashCode)?equals