2016-06-15 2 views
0

Mithilfe der Checker Framework können Methoden, die vom Konstruktor verwendet werden, @UnderInitialization annotierte Parameter annehmen.Checker Framework übergibt @ Initialized-Wert als @ UnderInitialization-Parameter

, ein solches Verfahren aus einem Nicht-Konstruktor aufrufen und es hat eine @Initialized Parameter Ergebnisse in der folgenden Fehler vorbei:

error: [argument.type.incompatible] incompatible types in argument. 

found : @Initialized <Object> 
required: @UnderInitialization <Object> 

Ich bin nicht sicher, dass dies ein Problem dar, da Leiten eines @Initialized Wert sollte nicht haben schlechte Nebenwirkungen.

Was ist der richtige Weg, um diesen Fehler zu beheben?

Antwort

1

Die Typprüfungswarnung sieht für mich richtig aus.

Um das Problem zu verstehen, betrachten Sie die type hierarchy of the initialization type system. @Initialized und @UnderInitialization sind Geschwister in der Typhierarchie. Es ist nicht mehr legal, @Initialized zu liefern, wenn @UnderInitialization erforderlich ist, als es ist, eine List zu liefern, wenn ein Date erforderlich ist.

Wenn Ihre Methode sowohl für Werte, die initialisiert werden, als auch für Werte, die gerade initialisiert werden, funktioniert, können Sie ihren Parameter als @UnknownInitialization annotieren, was ein Übertyp von @Initialized und @UnderInitialization ist.