[
https://issues.apache.org/jira/browse/LUCENE-7277?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15283854#comment-15283854
]
Paul Elschot commented on LUCENE-7277:
--------------------------------------
The rationale is that this code is common to some subclasses of Query, see also
the patch at LUCENE-6372.
There is nothing specific in this code for the Query class, any abstract class
without attributes might have these definitions.
Is there a way to enforce overriding a non abstract method in a subclass?
Aside: somehow this reminds me of the TermQuery constructors, see LUCENE-6821
and LUCENE-4483.
It's probably better to be on the safe side here too, and make these methods
abstract.
Otherwise we could add a remark in the javadocs of these methods that these
methods should normally be overridden and called via super.
A reminder in the javadocs of IndexSearcher would also help.
> 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: [email protected]
For additional commands, e-mail: [email protected]