期間解決繼承的嵌套靜態類的故事是很短的,它與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的行爲,或者我只是在這裏失去了一些東西?
你試過導入內部類嗎? –
導入內部類的樂趣在於我的IDE自動刪除它,因爲它確定它不是必需的。無論如何,我不應該被要求導入它或做任何特殊的事情,因爲它應該在範圍內可用。 – konradstrack
但要回答你的問題 - 導入'org.apache.lucene.analysis.Analyzer.TokenStreamComponents'也可以編譯它。 – konradstrack