Есть ли способ автогенерации оберток в Eclipse?
Мне нужно создать несколько прокси, чтобы добавить, например, журнал. Что-то вроде этого:
interface IMath {
public int add(a, b);
}
class Math implements IMath {
public int add(a, b) { return a + b; }
}
class MathWithLogs implements IMath {
private IMath realMath;
public int add(a, b) {
Log.d("tag", "valueable info");
return realMath.add(a, b);
}
}
Все прекрасно, пока эти интерфейсы не являются 20 методами, и я должен добавить что-то к одному.
Мой вопрос в том, есть ли способ автогенерировать классы-оболочки с некоторым плагином для eclipse?
Или, может быть, есть способ сделать что-то с аннотациями для вызова методов из realMath, если не указано иное (например, @Override)?
Ответы
Ответ 1
Щелкните правой кнопкой мыши в любом исходном файле (.java) и перейдите к source -> Override/Implement Methods/Generate Delegate Methods.
Первый вставляет тело всех методов вашего непосредственного интерфейса.
второй будет делать то же самое для всей иерархии до объекта (я думаю, не уверен).
Надеюсь, это поможет.
Ответ 2
Да, есть генератор источников, называемый "Generate Delegate Methods", который будет делать именно то, что вы хотите.
Ответ 3
Мне потребовалось некоторое время после прочтения других ответов, чтобы точно определить, что делать. Решение:
- Создайте свой (первоначально пустой) класс-оболочку, который реализует требуемый интерфейс. Обязательно снимите флажок "Унаследованные абстрактные методы" при создании класса.
- Внутри вашего нового класса-оболочки (который покажет ошибку в связи с тем, что ему не хватает реализаций интерфейса), создайте поле с типом, равным требуемому интерфейсу.
- Щелкните правой кнопкой мыши только что созданное поле и выберите "Источник" → "Создать методы делегата".
- Проверьте методы, которые вы хотите создать, и нажмите "ОК".
- Наконец, добавьте конструктор с одним аргументом или метод setter для поля (он не генерируется автоматически как часть этого процесса).