Эквивалентно расширению финального класса в Java - PullRequest
13 голосов
/ 27 января 2010

Я знаю, что в Java мы не можем расширять финальный класс. Но есть ли альтернативный способ получить эффект от продления последнего класса?

Поскольку у меня есть последний класс с требованиями, которые я ищу, так что, если я каким-то образом смогу использовать его повторно, это будет очень полезно для меня.

Ответы [ 2 ]

28 голосов
/ 27 января 2010

Создать обертку для финального класса?

Примерно так:

class MyClass {
    private FinalClass finalClass;

    public MyClass {
        finalClass = new FinalClass():
    }

    public void delegatingMethod() {
        finalClass.delegatingMethod();
    }
}

Класс-оболочка, такой как MyClass, не будет принят как экземпляр FinalClass. Если FinalClass реализует какие-либо интерфейсы, вы можете реализовать их в MyClass, чтобы сделать классы более похожими. То же самое относится и к любым не окончательным родителям FinalClass; в этом случае ваш MyClass дизайн должен быть совместим с этими родительскими классами.

Можно даже создать класс-оболочку во время выполнения, используя отражение. В этом случае вы можете использовать Proxy класс . Помните, что прокси-классы требуют глубоких знаний о системе типов Java.

3 голосов
/ 27 января 2010

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

Таким образом, легко переопределить или расширить методы финального класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...