![](/img/trans.png)
[英]Implementing equals and hashCode for objects with circular references in Java
[英]Java Hashcode and Equals for Java 8 functional interface objects
我有一些代码如下所示:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
class MyObj {
private final Double aDouble;
public MyObj(Double aDouble) {
this.aDouble = aDouble;
}
}
class Main {
public static void main(String[] args) {
List<Function<MyObj, String>> functionList1 = new ArrayList<>();
List<Function<MyObj, String>> functionList2 = new ArrayList<>();
// ... Add same Function<MyObj, String>s to both lists
// I want to assert that functionList1.equals functionList2
}
}
我想确认一些Function
, Supplier
, BiFunction
或不管它可能是MyObj
,将等于另一个,如果调用的结果Function
/ Supplier
等返回给定相同的输入相同的值。
所以在这种情况下,Java会使用equals
来比较两个列表的值,例如functionList1.get(0).apply(standardInstanceOfMyObj)
等于functionList2.get(0).apply(standardInstanceOfMyObj)
等。
我的问题是,如何覆盖Function<MyObj, String>
等特定类型的equals
和hashcode
以使上述工作成功?
你不能。 但是,您可以为实际实现Function
任何类重写它们。 比较函数(数学上)是棘手的业务,因为域空间可能是无限的,因此Java无法知道两个函数是相同的(除了数字标识的情况,其中equals()
无论如何都是真的)。 如果你有一些特定的函数,你可以提供更细粒度的equals()
/ hashCode()
(例如,因为它们基于一些解析的表达式语言,你可以比较字符串表示),那么你将拥有在你自己的班级写下这些标准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.