2013-07-12 4 views
5

sırasında kalıtsal iç içe statik sınıf çözülemiyor hikaye oldukça kısa olduğunu ve lucene en sınıflardan birkaç aşağıdaki alıntılar ile başlar:derleme

Analiz:

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)); 
    } 

    (...) 

} 

Şimdi bir Grails uygulamasında kendi sınıfımı tanımladım, 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) 
    } 
} 

Ve çalıştırmayı denediğinizde/uygulamayı derlemek, alıyorum:

[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 

Ancak, ben MyAnalyzer içinde geçersiz kılınan yöntemin tanımı Analyzer.TokenStreamComponents için TokenStreamComponents her iki tekrarlarını değiştirirseniz, sınıf derler ince.

Böyle bir davranışın arkasında mantıksal bir neden olup olmadığını bilen var mı? Bu arada Groovy veya Grails davrandı mı, yoksa burada bir şey mi özledim?

+3

İç sınıfı içe aktarmayı denediniz mi? –

+0

İç sınıfı içe aktarma ile eğlence, IDE'nin onu otomatik olarak kaldırmasıdır çünkü gereksiz olduğunu belirler. Her halükarda, bunu içeri almam gerekmemesi veya özel bir şey yapmamam gerekmemesi gerekiyor. – konradstrack

+0

Ama sorunuza cevap vermek için - org.apache.lucene.analysis.Analyzer.TokenStreamComponents'ı içe aktarmak da onu derlemekte. – konradstrack

cevap

1

Yalnızca satır içe aktarma Analyzer'ını ekleyin. *; Programınızın içe aktarma bölümüne. ! Çözdüyse bana haber ver.

+0

Map.Entry sınıfı ile aynı sorun vardı. Açık ithal java.util.Map.Entry kullanarak çözüldü –