在编译期间无法解析继承的嵌套静态类

kon*_*ack 5 java grails groovy

这个故事非常简短,首先是Lucene课程中的一些摘录:

分析:

public abstract class Analyzer implements Closeable {

    (...)

    public static class TokenStreamComponents { ... }

    (...)
}
Run Code Online (Sandbox Code Playgroud)

AnalyzerWrapper:

public abstract class AnalyzerWrapper extends Analyzer {

    (...)

    @Override
    protected final TokenStreamComponents createComponents(String fieldName, Reader aReader) {
        return wrapComponents(fieldName, getWrappedAnalyzer(fieldName).createComponents(fieldName, aReader));
    }

    (...)

}
Run Code Online (Sandbox Code Playgroud)

现在在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)
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行/编译应用程序时,我得到:

[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
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变都出现次数TokenStreamComponents,以Analyzer.TokenStreamComponents在覆盖方法的定义MyAnalyzer,类编译罚款.

有没有人知道这种行为背后是否有一些逻辑上的原因,例如Groovy或Grails的表现方式,或者我在这里错过了什么?

小智 2

只需添加行 import Analyzer.*; 到程序的导入部分。!让我知道是否解决了。!