No fim das contas usar Maps é só uma forma mais “elegante” do que usar ifs. Como elegancia é subjetiva, use o if se ficar mais confortável.
Como um exemplo, imagine que você quer retornar o código rgb de uma cor, baseada no seu nome.
Você pode escrever:
String getCodigoCor(String cor) {
if (cor.equals("azul")) return "#0000FF";
if (cor.equals("verde")) return "#00FF00";
if (cor.equals("vermelho")) return "#FF0000";
return "???";
}
Que quebra algumas convençoes de código por aí, mas aí com algumas chaves fica totalmente razoável.
Com mapas, você faria assim:
String getCodigoCor2(String cor) {
Map<String, String> cores = new HashMap<>();
cores.put("azul", "#0000FF");
cores.put("verde", "#00FF00");
cores.put("vermelho", "#FF0000");
return cores.getOrDefault(cor, "???");
}
Nessa versao, você tem um código mais curto (considerando as chaves da primeira versao que tive preguiça de colocar) e o mapeamento fica mais claro.
Pode se argumentar que é mais fácil adicionar novos casos na segunda versao, mas entramos no subjetivo de novo.
No seu caso porém, você nao quer mapear um valor, mas a chamada de um método. Entao precisa criar um Map de String (o nome no arquivo) para um método (getNome(), getCodigo(), etc).
No java 8 fica mais fácil fazer isso pois existe as referências de método (e a interface Supplier). Entao você pode criar um método assim:
String getValor(String campo) {
Map<String, Supplier<?>> campos = new HashMap<>();
campos.put("nome", this::getNome);
campos.put("codigo", this::getCodigo);
return campos.getOrDefault(nome, () -> "???").get().toString();
}
Estou dizendo que no meu mapa terei Supplier como valor. Supplier é uma funçao que retorna um valor sem precisar receber argumentos. O ? na assinatura é que o tipo pode variar (String, Integer).
O valor “this:getNome” é uma referência ao método getNome dessa classe. Aquele .get() no final do método é a mesma coisa de executar diretamente o getNome (ou getCodigo).
Por último, na última linha, eu forneço um Supplier default, caso nao exista o campo no mapa. Nesse caso você pode retornar a string vazia que mencionou.