5

ストーリーは非常に短く、Lucene のクラスからの次の抜粋から始まります。

アナライザ:

public abstract class Analyzer implements Closeable {

    (...)

    public static class TokenStreamComponents { ... }

    (...)
}

アナライザーラッパー:

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

ただし、のオーバーライドされたメソッドの定義で のTokenStreamComponents両方の発生を変更すると、クラスは正常にコンパイルされます。Analyzer.TokenStreamComponentsMyAnalyzer

Groovy や Grails の動作が原因で、そのような動作の背後に何らかの論理的な理由があるかどうかは誰にもわかりませんか?

4

1 に答える 1

2

import Analyzer.*; という行を追加するだけです。プログラムのインポートセクションに。! 解決したら教えてください。

于 2014-01-06T15:21:47.950 に答える