如何强制 Kotlin 哈希图中的键对象等效?

phr*_*eed 1 java key equals hashmap kotlin

我有一个类“Foo”(不在我的控制之下),我希望将其用作 kotlin(java)哈希图中的键。问题是“Foo”的“equals”方法确实值相等。对于我的情况来说,价值对等太宽松了。我需要对象等价。

有哪些方法可以强制在键上强制使用对象等效性?

我在想类似的事情...

data class Foo(val prop: String)
data class Bar(val prop: String)

fun main() {
    val fooMap = mutableMapOf<Any, Bar>()

    val fooA = Foo("common value")
    val fooB = Foo("common value")

    fooMap[fooA] = Bar("different A")
    fooMap[fooB] = Bar("different B")
    println("${fooMap.keys} ${fooMap.values}")
}
Run Code Online (Sandbox Code Playgroud)

这会导致 fooMap 只有一个条目,而我期望有两个条目。

[Foo(prop=common value)] [Bar(prop=different B)]
Run Code Online (Sandbox Code Playgroud)

Ate*_*Lux 5

考虑使用IdentityHashMap- 它是相同的映射,但仅比较键的引用。

另请注意,要有效地使用常规 HashMap,键类不仅必须遵守equals,而且还必须遵守hashCode