2013-07-12 192 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改变TokenStreamComponents都出现次数来Analyzer.TokenStreamComponents,类编译精细。

有谁知道这种行为背后是否存在某种逻辑原因,例如,顺便说Groovy或Grails的行为,或者我只是在这里失去了一些东西?

+3

你试过导入内部类吗? –

+0

导入内部类的乐趣在于我的IDE自动删除它,因为它确定它不是必需的。无论如何,我不应该被要求导入它或做任何特殊的事情,因为它应该在范围内可用。 – konradstrack

+0

但要回答你的问题 - 导入'org.apache.lucene.analysis.Analyzer.TokenStreamComponents'也可以编译它。 – konradstrack

回答

1

只需添加行import Analyzer。*;到您程序的导入部分。 !让我知道如果它解决了。

+0

与Map.Entry类有相同的问题。使用显式导入java.util.Map.Entry解决 –