Я пытаюсь взвесить плюсы и минусы использования EnumMap
над HashMap
. Так как я всегда буду искать с помощью String
, кажется, что правильный выбор будет HashMap
с ключом String
. Тем не менее, EnumMap
выглядит лучше, потому что он передает мое намерение ограничить ключи конкретным перечислением. Мысли?
Вот пример, показывающий, как я буду использовать Map
:
enum AnimalType { CAT, DOG }
interface Animal {}
class Cat implements Animal {}
class Dog implements Animal {}
public class AnimalFactory {
private static final Map<AnimalType, Animal> enumMap
= new EnumMap<AnimalType, Animal>(AnimalType.class);
// versus
private static final Map<String, Animal> stringMap
= new HashMap<String, Animal>();
static {
enumMap.put(AnimalType.CAT, new Cat());
enumMap.put(AnimalType.DOG, new Dog());
stringMap.put("CAT", new Cat());
stringMap.put("DOG", new Dog());
}
public static Animal create(String type) {
Animal result = enumMap.get(AnimalType.valueOf(type));
Animal result2 = stringMap.get(type);
return result;
}
}
Предположим, что AnimalType
перечисление и карта будут ТОЛЬКО использоваться AnimalFactory
для создания животных и больше нигде.
Какую Map
следует использовать?