[ https://issues.apache.org/jira/browse/LUCENE-6744?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14948993#comment-14948993 ]
Paul Elschot commented on LUCENE-6744: -------------------------------------- There is also LUCENE-6467, perhaps that can be merged here. > 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: Hoss Man > Labels: newdev > > 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 (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org