私はMap<Long, Optional<Throwable>>
のインスタンスを持っています(HashMapなどの他の表現からのImmutableMap.of/copyOfを使用してインスタンス化されています)。デバッグ時にインスタンスが同じように見えますが、ユニットテストで.equalsを使用して比較しようとしています。私は問題を追跡したかもしれないが、確かめたいと思った。JavaはMapと互換性がありませんか?
https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
これは、値ベースのクラスです。 Optionalのインスタンスでのidentity-sensitiveオペレーション(参照等価(==)、アイデンティティハッシュコード、または同期を含む)を使用すると、予期しない結果が生じる可能性があるため、避けるべきです。
私が読んだところでは、Map equalityの実装は、ほとんどの場合valueパラメータのhashcode実装に依存しているので、これが.equals呼び出しが失敗している理由が考えられますここに。しかし、これは「可能性があります」と言われているので、私はこれが基本的なユースケースではまだ有効であるかどうか、また注意が必要かどうかを知ることに興味があります。
デバッグ時には、int型のように見えますが、これはここで問題になる可能性があります。そうでない場合は、[mcve]を投稿してください –
比較しているインスタンスを作成する特定のコードを表示できますか? – Eran
問題は「オプション」ではありません。その理由は、['equals()'](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#equals-java.lang .Object-)実装は、ラップされたオブジェクトに転送します。あなたの問題は、ラップされた 'Throwable'オブジェクトが(一般的に)' equals() 'を実装していないことです。 – Andreas