2016-06-15 2 views
0

En utilisant le Checker Framework, les méthodes utilisées par le constructeur peuvent prendre les paramètres annotés @UnderInitialization.Checker Framework transmettant la valeur @Initialized en tant que paramètre @UnderInitialization

L'appel d'une telle méthode à partir d'un non-constructeur et passer un paramètre de résultats @Initialized dans l'erreur suivante:

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

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

Je ne suis pas sûr que ce soit un problème puisque le passage d'une valeur @Initialized ne doit pas avoir des effets secondaires malades.

Quelle est la bonne façon d'adresser cette erreur?

Répondre

1

L'avertissement de vérification de type me semble exact. Pour comprendre le problème, considérez le type hierarchy of the initialization type system. @Initialized et @UnderInitialization sont frères et sœurs dans la hiérarchie de type. Il n'est pas plus légal de fournir @Initialized lorsque @UnderInitialization est requis que de fournir List lorsqu'un Date est requis.

Si votre méthode fonctionne pour les deux valeurs qui sont initialisés et pour les valeurs qui sont en cours d'initialisation, alors vous pouvez annoter son paramètre comme @UnknownInitialization qui est un super-type des deux @Initialized et @UnderInitialization.