lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul Elschot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LUCENE-7277) Make Query.hashCode and Query.equals abstract
Date Sun, 15 May 2016 21:38:12 GMT

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

Paul Elschot commented on LUCENE-7277:
--------------------------------------

bq. I fail see how an equivalence relationship over all objects of a class could be useful
for caching reason
The idea is to make super.equals() determine equality as far as the (object of the) superclass
is concerned, and when it returns true to test the local class attributes.

bq.  it's misleading ... assuming defaults ... inherited from Object
So at least javadocs are needed to indicate that the current implementation only determines
class equivalence.

bq.  redeclare an overridden method as an abstract one
Thanks for that.

So there are some solutions here:
- javadocs only (not preferred),
- javadocs + redeclaration of overridden method as abstract
- abstract methods only

I'm fine with the latter two.
Redeclaration is probably a smaller change because it would keep the common code in the superclass.




> Make Query.hashCode and Query.equals abstract
> ---------------------------------------------
>
>                 Key: LUCENE-7277
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7277
>             Project: Lucene - Core
>          Issue Type: Improvement
>            Reporter: Dawid Weiss
>            Assignee: Dawid Weiss
>            Priority: Trivial
>
> Custom subclasses of the Query class have the default implementation of hashCode/equals
that make all instances of the subclass equal. If somebody doesn't know this it can be pretty
tricky to debug with IndexSearcher's query cache on. 
> Is there any rationale for declaring it this way instead of making those methods abstract
(and enforcing their proper implementation in a subclass)?
> {code}
>   public int hashCode() {
>     return getClass().hashCode();
>   }
>   public boolean equals(Object obj) {
>     if (obj == null)
>       return false;
>     return getClass() == obj.getClass();
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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


Mime
View raw message