Подтвердить что ты не робот

Есть ли способ автогенерации оберток в 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)?

4b9b3361

Ответ 1

Щелкните правой кнопкой мыши в любом исходном файле (.java) и перейдите к source -> Override/Implement Methods/Generate Delegate Methods.

Первый вставляет тело всех методов вашего непосредственного интерфейса. второй будет делать то же самое для всей иерархии до объекта (я думаю, не уверен). Надеюсь, это поможет.

Ответ 2

Да, есть генератор источников, называемый "Generate Delegate Methods", который будет делать именно то, что вы хотите.

Ответ 3

Мне потребовалось некоторое время после прочтения других ответов, чтобы точно определить, что делать. Решение:

  • Создайте свой (первоначально пустой) класс-оболочку, который реализует требуемый интерфейс. Обязательно снимите флажок "Унаследованные абстрактные методы" при создании класса.
  • Внутри вашего нового класса-оболочки (который покажет ошибку в связи с тем, что ему не хватает реализаций интерфейса), создайте поле с типом, равным требуемому интерфейсу.
  • Щелкните правой кнопкой мыши только что созданное поле и выберите "Источник" → "Создать методы делегата".
  • Проверьте методы, которые вы хотите создать, и нажмите "ОК".
  • Наконец, добавьте конструктор с одним аргументом или метод setter для поля (он не генерируется автоматически как часть этого процесса).