通过内容相等行为创建对象表达式

时间:2018-07-26 11:15:16

标签: kotlin equality

我想使用对象表达式创建即时对象,但我想通过它们的内容进行比较。有没有实现equalshashCode的简单方法?

更具体地讲,使此测试通过的最小更改是什么?

@Test
fun `an object comparison test`() {
    val obj1 = object {
        val x = 1
    }
    val obj2 = object {
        val x = 1
    }

    assertEquals<Any>(obj1, obj2)
}

1 个答案:

答案 0 :(得分:1)

(至少)没有实现相应的equals,它们将永远不相等。这就是您创建的每个objectinstance的本质。例外情况是data class个实例,它们实际上已经为您提供了适当的equals() / hashCode()

所以

data class Some(val value : String)

println(Some("one") == Some("one"))

实际上将打印true,即使这是两个不同的实例。

最简单的方法可能是提供您自己的断言函数(可能通过反射或不通过反射),或者如果测试框架提供了此方法,则使用反射断言equals-method。 在后一种情况下,以下内容可能对您很有趣:How do I assert equality on two classes without an equals method?