List<Map<String, String>> recordMapList = new ArrayList<LinkedHashMap <String,String>>();
3 Réponses :
La raison est que List
n'est pas la sous-classe de List
Solution, vous n'avez pas besoin de le déclarer comme: p >
List<Map<String, String>> recordMapList = new ArrayList<Map<String,String>>();
vous pouvez le déclarer comme:
List<Map<String, String>> recordMapList = new ArrayList<HashMap<String,String>>();
puis mettre HashMap
dans le recordMapList
.
Je vous suggère d'éviter d'instancier une liste avec un type générique donné, c'est-à-dire:
List<Map<String,String>> recordMapList = new ArrayList<>(); // Declaration + Assignment recordMapList.add(new HashMap<>()); // Add a first implementation of Map recordMapList.add(new TreeMap<>()); // Add a second implementation of Map
C'est la convention d'affectation générique à partir de Java 7 (à partir de cette version, les types génériques collection sont déduits via le type déclaré). Pourquoi? Puisque le type déclaré des valeurs de liste a déjà été explicitement indiqué lors de la déclaration de la variable de liste générique. Les valeurs sont des instances de l'interface de la carte et seront fournies dans l'implémentation du code.
Lors de l'accès aux valeurs de la liste, ce qui compte, c'est l'interface utilisée ( Map
), et non son implémentation ( HashMap
). De cette façon, si l'implémentation Map
est remplacée, il ne sera pas nécessaire de changer la valeur assignée de recordMapList
.
Voir l'exemple suivant (qui montre comment la liste n'est pas liée par une implémentation de Map
):
List<Map<String, String>> recordMapList = new ArrayList<>();
Référence:
Bonus :
Bien que ArrayList
soit une sous-classe de List
et que Map
soit une sous-classe de HashMap
, un List