2013-07-12 156 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解決 –