IMHO, a Pair should not be equal to anything which is not a Pair.

Reading the contract for equals

https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)


it must be symmetric, so Pair.equals should return false if the argument is a 
MapEntry






________________________________
Da: Dávid Szigecsán <sige...@gmail.com>
Inviato: giovedì 26 settembre 2024 13:36
A: Commons Users List <user@commons.apache.org>
Oggetto: Re: Bug in org.apache.commons.lang3.tuple.Pair

Hi,
As I see the "problem".
Pair.equal() returns true if the other entity is not an instance of Pair.
In this case it is a Map.Entry.
Map.Entry.equals() howewer checks if the other is an instance of the same
class. So if we want them to be equals, we should change the Map.Entry,
that is out of our limit of power. To make it symmetric we could check for
the instances of the same class also (and return false in this case), but I
think we don't want this.

Dávid

Alex Tsvetkov <a.e.tsvet...@gmail.com> ezt írta (időpont: 2024. szept. 26.,
Cs 13:11):

> Hi.
>
> I found a bug in the implementation of the method `equals` of class `Pair`.
>
> Implementation must be symmetric. Current implementation is not.
>
> Her test showing the problem:
>
> ```
>
> @Test
> void run() {
>     var pair = Pair.of("a", "b");
>     var entry = new Map.Entry<String, String>() {
>         public String getKey() { return "a"; }
>         public String getValue() { return "b"; }
>         public String setValue(String value) { return null; }
>     };
>     assertTrue(pair.equals(entry)); // true
>     assertTrue(entry.equals(pair)); // false
> }
> ```
>

--
Il messaggio è stato analizzato da Libraesva ESG.
Seguire il link qui sotto per segnalarlo eventualmente come spam:
http://antispam01.imteam.it/action/4XDs5M0fYhzKmXJ/report-as-bad
Seguire il link qui sotto per mettere in blocklist il mittente:
http://antispam01.imteam.it/action/4XDs5M0fYhzKmXJ/blocklist

Reply via email to