Вы всегда должны объявлять переменные и возвращаемые типы как наименее специализированные классы, или, в идеале, как интерфейсы, чтобы вы могли в любое время изменить реализацию.
Например, если в какой-то момент выЕсли вы решите, что хотите использовать TreeMap
вместо HashMap
, вам нужно всего лишь изменить:
private Map<String,String> namespaceMappings = new HashMap<String,String>();
на:
private Map<String,String> namespaceMappings = new TreeMap<String,String>();
Никаких других изменений не требуется вкод.
Максимальное значение, которое вы получите от этого, - то, что ваш класс обнародует.Например, если у вас есть метод getNamespaceMappings()
, возвращающий Map
, то каждый фрагмент кода, использующий этот метод, просто будет знать, что он будет использовать Map
.Если в какой-то момент вы решите внутренне представить эту карту как что-то отличное от HashMap
, то вы сохраните это внутренне для своего класса.
Если вы заставите метод возвращать HashMap
вместо этого, тогдавы раскрываете детали реализации.В будущем, если вы хотите использовать что-то отличное от HashMap
, тогда весь код, использующий этот класс, необходимо будет изменить, чтобы приспособиться к этому.