2013-07-12 6 views
5

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?

+3

Haben Sie versucht, die innere Klasse zu importieren? –

+0

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

+0

Aber um Ihre Frage zu beantworten - das Importieren von 'org.apache.lucene.analysis.Analyzer.TokenStreamComponents' lässt es auch kompilieren. – konradstrack

Antwort

1

Fügen Sie einfach die Zeile importieren Analyzer. *; zum Import-Bereich Ihres Programms. ! lass es mich wissen, wenn es gelöst wird.!

+0

Hatte dasselbe Problem mit Map.Entry-Klasse. Gelöst mit expliziten Import java.util.Map.Entry –

Verwandte Themen