Obtendo 'Incompatibilidade de tipo: não é possível converter de ArrayList <HashMap <String, String >> para List <Map <String, String >>' enquanto instanciar uma lista de mapas

Dockyard:
List<Map<String, String>> recordMapList = new ArrayList<HashMap<String,String>>();

A linha acima dá o erro: incompatibilidade de tipo: não é possível converter ArrayList> para a lista>

Mas a questão vai embora se o uso HashMap em vez de Mapa no lado esquerdo. Alguém poderia me dizer por que isso acontece. Eu preciso ter o lado esquerdo para conter Mapa como eu poderia estar usando a mesma variável para LinkedHashMap atribuir no lado righ como,

List<Map<String, String>> recordMapList = new ArrayList<LinkedHashMap <String,String>>();

Por favor ajude.

Kevin Cruijssen:

Embora ArrayListé uma sub classe de List, e Mapé uma subclasse de HashMap, um List<Map>não é uma subclasse de List<HashMap>. Da mesma forma você não pode lançar uma List<HashMap>a uma List<Map>. Se pudéssemos, isso significaria que poderíamos adicionar digamos que um TreeMapao nosso List<Map>, e depois lançá-lo a um List<HashMap>, violando assim o contrato original do List<HashMap>.

Pessoalmente, eu iria usar apenas um operador de diamante (Java 7+) se o recordMapList-instance é imediatamente criada:

List<Map<String, String>> recordMapList = new ArrayList<>();

E se ele é criado em outra parte apenas o Listpode ser um ArrayList, mas o resto seria a mesma. (NOTA: Você poderia, naturalmente, ainda usar o operador de diamante aqui também, mas se a criação da instância eo campo real são separados, eu, pessoalmente, prefiro usar os tipos de modo fica claro imediatamente que tipo vai para a lista, sem saltar para o campo real no código.)

List<Map<String, String>> recordMapList;
...
recordMapList = new ArrayList<Map<String, String>>();

Em ambos os casos, você pode adicionar suas HashMap<String, String>instâncias para o recordMapList.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=186717&siteId=1
Recomendado
Clasificación