Например, java.io.File - это просто конкретный класс. Моя замена для него поддерживает разрешение ярлыков Windows. Мне нужно предварительно обработать параметры конструктора для разрешения возможных файлов .lnk, потому что объект FileSystem, который выполняет нормализацию / каноническое определение / разрешение абстрактных путей, недоступен. Необходимость предварительной обработки исключает использование чистого подкласса - невозможно выполнить предварительную обработку перед вызовом super (...), а File является неизменным. Поэтому я расширяю File и использую делегат, переопределяя все конструкторы и методы File (вызывая super ("") во всех конструкторах).
Это работает хорошо, но, очевидно, не идеально - если файл изменится, я не буду переопределять какие-либо новые методы или конструкторы, и это откроет базовый пустой абстрактный путь. Я что-то упускаю из виду? Кажется, должен быть более простой / лучший способ.