簡體   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