Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-6744

equals methods should compare classes directly, not use instanceof

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • None
    • New

    Description

      from a 2015-07-12 email to the dev list from Fuxiang Chen...

      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.
      

      Attachments

        1. LUCENE-6744.patch
          6 kB
          Sachin Rajendra
        2. LUCENE-6744.patch
          10 kB
          zer0zero

        Issue Links

          Activity

            People

              Unassigned Unassigned
              hossman Chris M. Hostetter

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 50m
                  50m

                  Slack

                    Issue deployment