2013-07-12 12 views
5

Fabuła jest dość krótki i zaczyna się z kilku następujących fragmentów klasy Lucene w:Nie można rozwiązać odziedziczony zagnieżdżony klasę statyczną podczas kompilacji

Analyzer:

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

    (...) 

} 

teraz wewnątrz aplikacji Grails I zdefiniować własną klasę, 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) 
    } 
} 

A kiedy próbuję uruchomić/skompilować aplikację, otrzymuję:

[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 

Jeśli jednak zmienić zarówno wystąpień TokenStreamComponents do Analyzer.TokenStreamComponents w definicji metody zmienione w MyAnalyzer, przeprowadza kompilację klasy w porządku.

Czy ktoś wie, czy istnieje jakiś logiczny powód takiego zachowania, spowodowane na przykład przy okazji, jak zachowują się Groovy lub Grails, czy też czegoś tu brakuje?

+3

Czy próbowałeś importowania wewnętrzną klasę? –

+0

Zabawa z importowaniem klasy wewnętrznej polega na tym, że mój IDE usuwa ją automatycznie, ponieważ określa, że ​​jest niepotrzebna. I w każdym razie nie powinienem być zobowiązany do importowania go lub robienia czegoś specjalnego, ponieważ powinien on być dostępny w zakresie. – konradstrack

+0

Ale aby odpowiedzieć na twoje pytanie - zaimportowanie 'org.apache.lucene.analysis.Analyzer.TokenStreamComponents' również powoduje jego kompilację. – konradstrack

Odpowiedz

1

Wystarczy dodać Analyzer linia import. *; do sekcji importu twojego Programu. ! daj mi znać, jeśli to rozwiązany.!

+0

Miał ten sam problem z klasą Map.Entry. Rozwiązano za pomocą jawnego importu java.util.Map.Entry –

Powiązane problemy