2013-07-12 6 views
5

時に継承された入れ子になった静的クラスを解決することができません話は非常に短く、それはLuceneのクラスから数以下の抜粋で始まる:コンパイル

アナライザ:

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)); 
    } 

    (...) 

} 

Grailsアプリケーションの中で私自身のクラスを定義しています。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) 
    } 
} 

そして、私はアプリケーションをコンパイル/実行しようとすると、私が手:

[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 

しかし、私はMyAnalyzerでオーバーライドされたメソッドの定義でAnalyzer.TokenStreamComponentsTokenStreamComponentsの両方の出現箇所を変更した場合、クラスのコンパイル良い。

誰かがこのような振る舞いの背後に論理的な理由があるかどうかを知っていますか? GroovyやGrailsの振る舞いによって、あるいはここで何かが欠落しているのでしょうか?

+3

内部クラスをインポートしようとしましたか? –

+0

内部クラスをインポートするのは、IDEが不要であると判断して自動的に削除することです。とにかく、私はそれをインポートするか、特別なことをする必要はありません。なぜなら、それはスコープ内で利用できるはずですから。 – konradstrack

+0

しかし、あなたの質問に答えるために、 'org.apache.lucene.analysis.Analyzer.TokenStreamComponents'をインポートすると、コンパイルされます。 – konradstrack

答えて

1

ラインインポートアナライザを追加するだけです。*;プログラムのインポートセクションに移動します。 !それが解決すれば教えてください!

+0

Map.Entryクラスで同じ問題がありました。明示的なインポートを使用して解決java.util.Map.Entry –