Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Variável de classe tipo final

Estou olhando a classe EmpresaDAO onde tem a variável de classe EMPRESAS do tipo HashMap(), a propriedade final não define ela como um constante? Como é possível usar o método adiciona incrementando o hashMap? package br.com.alura.gerenciador.dao;

import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map;

import br.com.alura.gerenciador.Empresa;

public class EmpresaDAO {

private final static Map EMPRESAS = new HashMap<>(); static { geraIdEAdiciona(new Empresa("Doceria Bela Vista")); geraIdEAdiciona(new Empresa("Ferragens Docel")); geraIdEAdiciona(new Empresa("Alura")); geraIdEAdiciona(new Empresa("Google")); geraIdEAdiciona(new Empresa("Caelum")); geraIdEAdiciona(new Empresa("Casa do Código")); }

public Collection buscaPorSimilaridade(String nome) { if (nome == null) return EMPRESAS.values();

List similares = new ArrayList<>(); for (Empresa empresa : EMPRESAS.values()) { if (empresa.getNome().toLowerCase().contains(nome.toLowerCase())) similares.add(empresa); } return similares; }

public void adiciona(Empresa empresa) { geraIdEAdiciona(empresa); }

private static void geraIdEAdiciona(Empresa empresa) { long id = EMPRESAS.size()+1l; empresa.setId(id); EMPRESAS.put(id, empresa); } }

2 respostas
solução!

Boa tarde Elton, o final nesse caso irá impedir de usar EMPRESAS para receber outra coleção, poe exemplo... se fizemos:

private final static Map EMPRESAS = new HashMap<>()

Não podemos atribuir outro map a EMPRESAS,isto é, não podemos dar new novamente! Mas podemos manipular EMPRESAS

Ok, obrigado