У меня есть несколько различных представлений одного и того же типа объекта; давайте назовем это вещью. «Вещь» - это маркерный интерфейс. ThingFormat0, ThingFormat1, ThingFormat2 и т. Д. Являются JavaBean-компонентами, которые реализуют Thing. (Поскольку они являются JavaBeans, маршаллер JSON автоматически преобразует их в и из JSON автоматически.) ThingFormat1 имеет всего несколько членов, таких как name и id. ThingFormat2 имеет ссылки URI на другие вещи. В ThingFormat3 есть ThingFormat1 представления этих других вещей и т. Д.
Сериализатор JSON знает, как автоматически преобразовать URI. (Это работает для любого класса, где вы можете использовать toString () и конструктор ClassName (String string) для преобразования.)
Я хочу иметь ThingFormat0, который ведет себя как URI, но реализует интерфейс маркера Thing.
public class ThingFormat0 extends URI implements Thing {}
Это не работает, потому что URI является последним классом и не может быть разделен на подклассы.
Единственный способ сделать это - создать декоратор (очень вырожденный вид декоратора, так как он не добавляет никакой функциональности в URI). Это легко в некоторых языках типа "утка", но больше боли в Java, потому что я должен обернуть URI и реализовать все методы URI, которые мне нужны. Есть ли более простой способ?