Re[2]: Неполиморфный вызов
От: LCR Россия lj://_lcr_
Дата: 07.08.04 05:58
Оценка:
Здравствуйте, yury.fedorov, Вы писали:

YF>Здравствуйте, LCR, Вы писали:


LCR>>Как?


YF>Я бы решил эту проблему так:


YF>class A

YF>{

YF> // Changed implementation.

YF> public int meth() { return localMeth(); }

YF> // Added.

YF> private final int localMeth() { return 10; }

YF> // Changed implemenatation.

YF> public void coolMeth()
YF> {
YF> System.out.println( this.localMeth() ); // !!! НЕ хочется, чтобы вот здесь сработал полиморфный вызов
YF> }
YF>}

YF>Такой способ никак не влияет на структуру наследования и приемлем как в случае, когда класс А — базовый, так и когда он потомок какого-то уже ранее определенного класса.


Ну естественно, данная (конкретная) задача решается рефакторингом. Но вопрос не в этом, вопрос в следующем: есть метод, есть вызов этого метода. Как в данной, конкретной точке сделать вызов этого метода неполиморфным?
Пока есть 2 решения
1. Создать новый финальный (приватный, статический) метод, дублируя (или перенося) функциональность.
2. Использовать трюк ykk, переопределяя все места, где используется данный метод meth() и где нужен неполиморфный вызов (с понятными ограничениями, которые накладывает использование super'а).

Изменить сигнатуру метода на (приватный, статический) не подходить, поскольку он меняет целиком метод и влияет на все точки вызова.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.