реализация интерфейсов после факта

Я думаю, что следующее не может быть сделано в Java. Но я был бы счастлив узнать, как реализовать нечто похожее на это.

Предположим, у нас есть класс C, который уже используется в скомпилированном коде. (Мы не можем ни изменить этот код, ни оригинальное определение C).

Предположим далее, что есть интересный код, который можно использовать повторно, если бы только C реализовывал интерфейс I. На самом деле, более или менее тривиально получить D, который является просто C + реализацией методов интерфейса.

Тем не менее, кажется, нет никакого способа, если у меня есть C, сказать: я хочу, чтобы вы были D, то есть C, реализующим I.

(Примечание: я думаю, что приведение (D) c, где тип времени выполнения c - C, должно быть разрешено, если D - это C, и единственное отличие от C - добавленные методы. Это должно быть безопасно, не так ли?)

Как можно обойти это бедствие?

(Я знаю шаблон проектирования фабрики, но, похоже, это не решение. Поскольку, как только нам удастся создать D во всех местах, где раньше были C, кто-то найдет другой интерфейс J полезным и получит, что E расширяет C, реализует J. Но E и D несовместимы, так как они оба добавляют другой набор методов для C. Поэтому, хотя мы всегда можем передать E, где ожидается C, мы не можем передать E, где ожидается D. Скорее, теперь, нам нужен новый класс F расширяет C реализует I, J.)

Ответы на вопрос(6)

Ваш ответ на вопрос