Typsicherheit: Ungeprüfte Umwandlungswarnung im Spring-Anwendungskontext
Wenn Sie ein aus dem Spring-Anwendungskontext erhaltenes Objekt in einen bestimmten Typ umwandeln, müssen Sie Möglicherweise wird eine Warnung bezüglich der Typsicherheit angezeigt. Dies geschieht trotz der Angabe von Typinformationen in der Kontextdatei.
Problem:
In einer Spring-Kontextdatei:
<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>
In der Java-Klasse :
<code class="java">private Map<String, String> someMap = new HashMap<String, String>(); someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");</code>
Während der Kompilierung generiert Eclipse die folgende Warnung:
Type safety: Unchecked cast from Object to HashMap<String,String>
Ursache:
Java verwendet während der Kompilierung die Typlöschung Entfernt generische Typinformationen aus dem kompilierten Code. Daher kann die Java Virtual Machine (JVM) nicht überprüfen, ob die Umwandlung zur Laufzeit sicher ist.
Lösung:
Da die Typlöschung es unmöglich macht, den Typ zu garantieren Um die Sicherheit zur Laufzeit zu gewährleisten, kann die folgende Problemumgehung verwendet werden:
<code class="java">@SuppressWarnings("unchecked") private Map<String, String> someMap = (Map<String, String>)getApplicationContext().getBean("someMap");</code>
Diese Annotation unterdrückt die Warnung, es ist jedoch wichtig zu beachten, dass die Umwandlung immer noch potenziell unsicher ist.
Alternative:
Während die Annotation @SuppressWarnings eine praktische Lösung bietet, wäre ein robusterer Ansatz die Aktivierung verifizierter Generika in Java. Reifizierte Generika ermöglichen die Beibehaltung von Typinformationen zur Laufzeit, was eine strengere Typprüfung ermöglicht und die Notwendigkeit ungeprüfter Umwandlungen überflüssig macht.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich eine ungeprüfte Cast-Warnung, wenn ich über den Spring-Anwendungskontext auf eine Bean zugreife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!