Re: Bug in org.apache.commons.lang3.tuple.Pair

"Gary D. Gregory" <[email protected]> Thu, 26 Sep 2024 12:26:17 -0000
Newsgroups gmane.comp.jakarta.commons.user
Message-ID <pony-3e839f62-6542-4866-a471-dcfe9b99d005-user@commons.apache.org>

On 2024/09/26 11:36:49 Dávid Szigecsán wrote:
...
> Map.Entry.equals() howewer checks if the other is an instance of the same
> class. 

Dávid,

It does not, in Java 8 and 23, the method is abstract and does not define code, but the Javadoc does define expected behavior.

I imagine that it was not changed to a default method for compatibility.

Gary

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 <[email protected]> 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
> > }
> > ```
> >
>