Этот класс должен быть интерфейсом, а у него должна быть абстрактная реализация.
Желательно, чтобы он был один и тот же как для шелла, так и для FileMap.
Старайтесь избегать не-final protected полей. Давайте сделаем их все final и проинициализируем в конструкторе.