Sécurité du type : avertissement de conversion non coché dans le contexte de l'application Spring
Lors de la conversion d'un objet obtenu à partir du contexte de l'application Spring vers un type spécifique, vous peut rencontrer un avertissement concernant la sécurité du type. Cela se produit malgré la spécification des informations de type dans le fichier de contexte.
Problème :
Dans un fichier de contexte Spring :
<code class="xml"><util:map id="someMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String"> <entry key="some_key" value="some value" /> <entry key="some_key_2" value="some value" /> </util:map></code>
Dans la classe Java :
<code class="java">private Map<String, String> someMap = new HashMap<String, String>(); someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");</code>
Lors de la compilation, Eclipse génère l'avertissement suivant :
Type safety: Unchecked cast from Object to HashMap<String,String>
Cause :
Java utilise l'effacement de type lors de la compilation, ce qui supprime les informations de type générique du code compilé. Par conséquent, la machine virtuelle Java (JVM) ne peut pas vérifier que le cast est sûr au moment de l'exécution.
Solution :
Étant donné que l'effacement du type rend impossible la garantie du type sécurité au moment de l'exécution, la solution de contournement suivante peut être utilisée :
<code class="java">@SuppressWarnings("unchecked") private Map<String, String> someMap = (Map<String, String>)getApplicationContext().getBean("someMap");</code>
Cette annotation supprime l'avertissement, mais il est important de noter que la diffusion est toujours potentiellement dangereuse.
Alternative :
Bien que l'annotation @SuppressWarnings fournisse une solution pratique, une approche plus robuste consisterait à activer les génériques réifiés en Java. Les génériques réifiés permettent la préservation des informations de type au moment de l'exécution, permettant une vérification de type plus rigoureuse et éliminant le besoin de conversions non vérifiées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!