Перегрузка конструктора класса библиотеки - PullRequest
2 голосов
/ 21 декабря 2011

Я имею дело со следующей проблемой.Я использую библиотеку и хотел бы перегрузить конструктор класса в этой библиотеке, чтобы лучше соответствовать моим потребностям.Класс библиотеки предоставляет конструктор, подобный следующему:

public SomeName(int variable) {...}

, и я хотел бы иметь возможность вызвать

public SomeName(int variable, float myVariable) {...}

Создание фабрики для этого, кажется, излишним, есть липростой способ сделать это?

Ответы [ 4 ]

3 голосов
/ 21 декабря 2011

Язык Java не предоставляет никаких высокоуровневых конструкций, которые позволят вам изменять конструкторы суперкласса без изменения самого кода класса.

Тем не менее, есть альтернативы.В основном, вы можете использовать cglib , чтобы «внедрить» байт-код в библиотеку и создать свои собственные конструкторы (с помощью нескольких продвинутых методов).

Это абсолютно , а не рекомендуется длябольшинство задач кодирования и лучшее решение вашей проблемы (при условии, что вы не делаете что-то нетривиальное), это просто создание подкласса этого класса:

class SomeName {
    public SomeName(int variable) {
        ...
    }
}

class OtherName extends SomeName {
    public OtherName(float otherVariable) {
        this(*DEFAULT*, otherVariable);
    }

    public OtherName(int variable, float otherVariable) {
        super(variable);
        ...
    }
}
3 голосов
/ 21 декабря 2011

Создайте подкласс этого класса и добавьте новый конструктор:)

3 голосов
/ 21 декабря 2011

Вы не можете сделать это без изменения библиотеки.

1 голос
/ 21 декабря 2011

extend Класс и создать новый конструктор, потому что вы не можете сделать это без изменения библиотеки.

...