У меня есть сторонняя библиотека, которая имеет кучу интерфейсов и сборщиков для создания объектов, реализующих интерфейсы. Эти сконструированные объекты затем передаются в контейнеры. Затем у меня есть интерфейс в моем приложении, который я хочу добавить к объекту, возвращенному из компоновщика.Добавление интерфейса к существующему объекту
Третья сторона
interface ThirdParty1 { ... }
interface ThirdParty2 { ... }
class Builder {
...
public ThirdParty1 build() { ... }
}
class ThirdPartyContainer {
void append(ThirdParty1 toAdd) { ... }
ThirdParty1 take() { ... }
}
Мое приложение
interface MyInterface { ... }
class MainBody {
ThirdPartyContainer queue;
MainBody() {
ThirdParty1 foo = new Builder().build();
// something to add implementation of MyInterface to foo
queue.append(foo);
}
void calledLater() {
ThirdParty1 bar = queue.take();
if (bar instanceof MyInterface) {
// do something
} else if (bar instanceof ThirdParty2) {
// do something else
}
}
}
Я знаю, что я мог бы построить класс-оболочку, которая реализуется ThirdParty1 и MyInterface и взял экземпляр ThirdParty который все вызовы, где пересылаются. Однако это означает, что если Builder.build возвращает что-то, что является реализацией ThirdParty1 и ThirdParty2, реализация ThirdParty2 будет потеряна оболочкой.
Я ожидаю, что то, что я за этим, невозможно, но, будучи довольно новым для Java и всей Магии, которую можно сделать, я не был уверен.
Не совсем, нет. Java не является динамическим языком, где такие вещи возможны и даже рекомендуются. Может быть более удобное решение, чем обертка, если вы объясните свой вариант использования. – Kayaman
В моей работе используется карта, индексированная по ссылке, возвращенной от строителя, к объектам, реализующим MyInterface, это прекрасно работает, но я надеялся, что Java может позволить более элегантное решение, которое предотвратило бы необходимость раскрытия этой карты. Спасибо – lachlan