Java 8 函数接口对象的 Java Hashcode 和 Equals

2023-12-29

我有一些代码如下所示:

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给定相同的输入,etc 返回相同的值。

因此在这种情况下,Java 将使用以下方法比较两个列表的值equals像这样functionList1.get(0).apply(standardInstanceOfMyObj) equals functionList2.get(0).apply(standardInstanceOfMyObj) etc.

我的问题是,我怎样才能覆盖equals and hashcode对于特定类型,例如Function<MyObj, String>使上述工作?


你不能。但是,您可以为实际实现的任何类覆盖它们Function。比较函数(数学上)是一件棘手的事情,因为域空间可能是无限的,因此 Java 无法知道两个函数是否相同(除了数字恒等式的情况,其中equals()无论如何都是真的)。如果您有一些特定的功能,您可以为其提供更细粒度的equals()/hashCode()(例如,因为它们基于某种解析的表达式语言,并且您可以比较字符串表示形式),那么您必须在自己的类中编写这些条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 函数接口对象的 Java Hashcode 和 Equals 的相关文章

随机推荐