[ https://issues.apache.org/jira/browse/LUCENE-7277?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15284233#comment-15284233 ]
Dawid Weiss commented on LUCENE-7277: ------------------------------------- While it may sound like a good idea to put some of the shared "equivalence checks" in the superclass, it's actually the misleading part because, if left as-is and not overridden in a subclass, it results in an incorrect behavior (the query object is cached for all instances of the subclass). If query hash/equals is so important (and it is), I'd make it an abstract method to enforce proper override in all subclasses. > 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-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org