オブジェクト:JavaのハッシュコードとJava 8の機能インターフェースのために等しいが、私は以下のように見えるいくつかのコード持って
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
}
}
を私はそれがMyObj
の一部Function
、Supplier
、BiFunction
またはかもしれないどんなことを確認したいのですがFunction
/Supplier
などの呼び出しの結果が同じ入力で同じ値を返す場合、別の値と等しくなります。
したがって、この場合には、Javaは似equals
を使用して2つのリストの値を比較しますのでfunctionList1.get(0).apply(standardInstanceOfMyObj)
がfunctionList2.get(0).apply(standardInstanceOfMyObj)
に等しいなど
私の質問はどのように私は作るためにFunction<MyObj, String>
のような特定のタイプのequals
とhashcode
を上書きすることができ、あります上記の仕事?
なぜデータ型ではなく、関数のメソッドをオーバーライドしたいのですか? – jrtapsell
まあ、2つの関数は、パラメータ 'a'では同じ値を返しますが、パラメータbでは異なる値を返します。どのようにそれを処理するつもりですか? – Sweeper
なぜこれらの小切手をしたいですか?どんな種類のテスト( "assert"の使用が示唆している)の場合は、おそらくテストフレームワークが提供するメソッドにとどまるべきです。 equals()とhashcode()は、同等の状態ではなく、状態の等価性を意味します。 –