![](/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.