我有一些代码如下所示:
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
/ equals
等在给定相同输入的情况下返回相同的值。
因此,在这种情况下,Java会使用functionList1.get(0).apply(standardInstanceOfMyObj)
比较两个列表的值,因此functionList2.get(0).apply(standardInstanceOfMyObj)
等于equals
等。
我的问题是,我如何覆盖hashcode
和Function<MyObj, String>
等特定类型,例如<div class="container">
<nav class="navbar navbar-expand-md navbar-light bg-faded" id="menutop">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#nav-content" aria-controls="nav-content" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Brand -->
<a class="navbar-brand" href="#">
BRAND
</a>
<!-- Links -->
<div class="collapse navbar-collapse justify-content-end" id="nav-content">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="#">COMO FUNCIONA</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">TRABAJA CON NOSOTROS</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">TIENDA</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">BLOG</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">EQUIPO</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">REPARA</a>
</li>
</ul>
</div>
</nav>
</div>
才能完成上述工作?
答案 0 :(得分:3)
你不能。但是,您可以为实际实现Function
的任何类重写它们。比较函数(数学上)是棘手的业务,因为域空间可能是无限的,因此Java无法知道两个函数是相同的(除了数字标识的情况,其中equals()
无论如何都是真的)。如果你有一些特定的函数,你可以提供更细粒度的equals()
/ hashCode()
(例如,因为它们基于一些解析的表达式语言,你可以比较字符串表示),那么你必须在自己的班级中写下这些标准。