La manière efficace de le faire est simplement d'effectuer un cast vers une Map générique comme suit :
Properties props = new Properties();
Map<String, String> map = (Map)props;
Cela permettra de convertir un Map<Object, Object>
en une Map brute, ce qui est "ok" pour le compilateur (seulement un avertissement). Une fois que nous avons un Map
elle sera lancée vers Map<String, String>
qui sera également "ok" (autre avertissement). Vous pouvez les ignorer avec l'annotation @SuppressWarnings({ "unchecked", "rawtypes" })
Cela fonctionnera car dans la JVM, l'objet n'a pas vraiment de type générique. Les types génériques sont juste une astuce qui permet de vérifier les choses au moment de la compilation.
Si une clé ou une valeur n'est pas une chaîne de caractères, un message d'erreur sera généré. ClassCastException
erreur. Avec les Properties
il est très peu probable que cela se produise, tant que vous n'utilisez pas les méthodes d'appel mutable de l'implémentation super Hashtable<Object,Object>
de Properties
.
Donc, si vous ne faites pas de choses désagréables avec votre instance de propriétés, c'est la solution.