繁体   English   中英

Java Hashcode和Equals for Java 8功能接口对象

[英]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
    }
}

我想确认一些FunctionSupplierBiFunction或不管它可能是MyObj ,将等于另一个,如果调用的结果Function / Supplier等返回给定相同的输入相同的值。

所以在这种情况下,Java会使用equals来比较两个列表的值,例如functionList1.get(0).apply(standardInstanceOfMyObj)等于functionList2.get(0).apply(standardInstanceOfMyObj)等。

我的问题是,如何覆盖Function<MyObj, String>等特定类型的equalshashcode以使上述工作成功?

你不能。 但是,您可以为实际实现Function任何类重写它们。 比较函数(数学上)是棘手的业务,因为域空间可能是无限的,因此Java无法知道两个函数是相同的(除了数字标识的情况,其中equals()无论如何都是真的)。 如果你有一些特定的函数,你可以提供更细粒度的equals() / hashCode() (例如,因为它们基于一些解析的表达式语言,你可以比较字符串表示),那么你将拥有在你自己的班级写下这些标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM