You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Puneeth Bikkumanla (Jira)" <ji...@apache.org> on 2020/09/11 05:02:00 UTC

[jira] [Comment Edited] (LUCENE-6744) equals methods should compare classes directly, not use instanceof

    [ https://issues.apache.org/jira/browse/LUCENE-6744?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17193986#comment-17193986 ] 

Puneeth Bikkumanla edited comment on LUCENE-6744 at 9/11/20, 5:01 AM:
----------------------------------------------------------------------

Hey everyone, I just opened up a PR for this issue today - [https://github.com/apache/lucene-solr/pull/1858]. Please take a look and lemme know what you think! 


was (Author: puneethb):
Hey, I just opened up a PR for this issue today - [https://github.com/apache/lucene-solr/pull/1858]. Please take a look and lemme know what you think! 

> equals methods should compare classes directly, not use instanceof
> ------------------------------------------------------------------
>
>                 Key: LUCENE-6744
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6744
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Chris M. Hostetter
>            Priority: Major
>              Labels: newdev
>         Attachments: LUCENE-6744.patch, LUCENE-6744.patch
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> from a 2015-07-12 email to the dev list from Fuxiang Chen...
> {noformat}
> We have found some inconsistencies in the overriding of the equals() method
> in some files with respect to the conforming to the contract structure
> based on the Java Specification.
> Affected files:
> 1) ConstValueSource.java
> 2) DoubleConstValueSource.java
> 3) FixedBitSet.java
> 4) GeohashFunction.java
> 5) LongBitSet.java
> 6) SpanNearQuery.java
> 7) StringDistanceFunction.java
> 8) ValueSourceRangeFilter.java
> 9) VectorDistanceFunction.java
> The above files all uses instanceof in the overridden equals() method in
> comparing two objects.
> According to the Java Specification, the equals() method must be reflexive,
> symmetric, transitive and consistent. In the case of symmetric, it is
> stated that x.equals(y) should return true if and only if y.equals(x)
> returns true. Using instanceof is asymmetric and is not a valid symmetric
> contract.
> A more preferred way will be to compare the classes instead. i.e. if
> (this.getClass() != o.getClass()).
> However, if compiling the source code using JDK 7 and above, and if
> developers still prefer to use instanceof, you can make use of the static
> methods of Objects such as Objects.equals(this.id, that.id). (Making use of
> the static methods of Objects is currently absent in the methods.) It will
> be easier to override the equals() method and will ensure that the
> overridden equals() method will fulfill the contract rules.
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org