我遇到了这个。
private final Function1<byte[], Boolean> successConditionForResponse;
而且不知道如何在Java或Kotlin中比较这两个?
我搜索了,但没有找到具体的方法。
private final Function1<byte[], Boolean> successConditionForResponse;
而且不知道如何在Java或Kotlin中比较这两个?
我搜索了,但没有找到具体的方法。
那么,你希望这个比较做什么?在函数上使用equals
将检查它们是否是相同的对象,因为它不会重写默认实现(所以也会使用==
,但你不想养成在Java中使用它来处理对象的习惯)。所以如果这就是你想要的,你已经完成了。
如果你想检查两个函数是否在语义上相等(也就是说,当对任何参数进行调用时,它们产生相同的结果并具有相同的副作用),那么没有办法可以做到这一点,出于众所周知的数学原因,这确实是不可能的。
最后,你可能想知道它们是否由相同的lambda创建并捕获相同的值。对于Kotlin lambdas,可以通过序列化它们并比较结果来实现,对于Java lambdas,需要以特定方式创建它们。这有点像一个hack且速度较慢,但可能已经足够好了。
情况1。
假设你有:
val a: (ByteArray) -> Boolean = ...
val b: (ByteArray) -> Boolean = ...
val
。if(a(someByteArray) == b(someByteArray))
相反,如果你真的想比较这两个函数,你可以简单地执行以下操作:
if(a == b)
情况2。
假设你有:
val a: Function1<ByteArray, Boolean> = ...
val b: Function1<ByteArray, Boolean> = ...
Function1<T, R>
的对象。
与前面的情况类似:
比较函数结果:
if (a.apply(someByteArray) == b.apply(someByteArray))
比较两个类型为 Function1<ByteArray, Boolean>
的对象:
if(a == b)
Intrinsics.areEqual(successConditionForResponse1, successConditionForResponse2)
,它是如何比较的呢? - Tord Larsen