Die Geschichte ganz kurz eine vererbte verschachtelte statische Klasse während der Kompilierung zu lösen, und es beginnt mit den wenigen folgenden Auszüge aus Lucene der Klassen:Unfähig ist
Analyzer:
public abstract class Analyzer implements Closeable {
(...)
public static class TokenStreamComponents { ... }
(...)
}
AnalyzerWrapper:
public abstract class AnalyzerWrapper extends Analyzer {
(...)
@Override
protected final TokenStreamComponents createComponents(String fieldName, Reader aReader) {
return wrapComponents(fieldName, getWrappedAnalyzer(fieldName).createComponents(fieldName, aReader));
}
(...)
}
Jetzt innerhalb einer Grails-Anwendung definiere ich meine eigene Klasse, MyAnalyzer.groovy
class MyAnalyzer extends AnalyzerWrapper {
private final PerFieldAnalyzerWrapper perFieldAnalyzerWrapper
public MyAnalyzer() { ... }
@Override
protected Analyzer getWrappedAnalyzer(String fieldName) {
perFieldAnalyzerWrapper.getWrappedAnalyzer(fieldName)
}
@Override
protected TokenStreamComponents wrapComponents(String fieldName, TokenStreamComponents tokenStreamComponents) {
perFieldAnalyzerWrapper.wrapComponents(fieldName, tokenStreamComponents)
}
}
Und wenn ich versuche, um die Anwendung auszuführen/kompiliert, erhalte ich:
[groovyc] Compiling 2 source files to E:\somewhere\...\target\classes
[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] E:\somewhere\...\MyAnalyzer.groovy: 31: unable to resolve class TokenStreamComponents
[groovyc] @ line 31, column 5.
[groovyc] @Override
[groovyc] ^
[groovyc]
[groovyc] 1 error
Wenn ich jedoch beiden Vorkommen von TokenStreamComponents
-Analyzer.TokenStreamComponents
in der Definition der überschriebene Methode in MyAnalyzer
zu ändern, um die Klasse compiliert fein.
Weiß jemand, ob es einen logischen Grund für ein solches Verhalten gibt, z. Übrigens verhält sich Groovy oder Grails, oder fehlt mir hier gerade etwas?
Haben Sie versucht, die innere Klasse zu importieren? –
Der Spaß mit dem Importieren der inneren Klasse ist, dass meine IDE es automatisch entfernt, weil es bestimmt, dass es unnötig ist. Und außerdem sollte ich nicht verpflichtet sein, es zu importieren oder etwas Besonderes zu tun, da es im Umfang verfügbar sein sollte. – konradstrack
Aber um Ihre Frage zu beantworten - das Importieren von 'org.apache.lucene.analysis.Analyzer.TokenStreamComponents' lässt es auch kompilieren. – konradstrack