Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 62707
Организация зап... 59856
Invision Power ... 59476
Приложение «Про... 58750
Оператор выбора... 57865
Модуль Forms 57747
Подключение Mic... 57104
Создание отчето... 57052
ТЕХНОЛОГИИ ДОСТ... 53344
Программируемая... 51189
Пример работы с... 49220
Имитационное мо... 48813
21 ошибка прогр... 43574
Реклама
Самая подробная информация слуховой аппарат jinghao jh 125 у нас на сайте.
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

Пользователей: 13,044
новичок: Denchik37
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Меры близости на векторах в Delphi + Блок схемы
Метод половинного деления для нахождения корня уровнения на Turbo Pascal...
Информационная система - продуктовый магазин на Turbo Pascal (База данны...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании

Методы-подставки
В тех случаях, когда стирание информации о настраиваемом типе в переопределенном методе производного класса не выполняет такого же стирания, как метод в его суперклассе, компилятору приходится вставлять в класс метод-подставку (bridge method). В подобной ситуации генерируется метод, выполняющий стирание информации о настраиваемом типе в суперклассе и уже этот метод вызывает метод производного класса, стирающий информацию о типах заданную в подклассе. Конечно, методы-подставки появляются только на уровне байт-кода, они скрыты от Вас и Вы не можете ими воспользоваться.
Несмотря на то, что методы-подставки, как правило, не должны Вас интересовать, рассмотрим очень поучительную ситуацию (листинг 3.21), в которой генерируется один из них.

Листинг 3.21. Ситуация, порождающая метод-подставку
class Gen {
T ob; // declare an Object of type T

// Pass the constructor a reference to
// an Object of type T.
Gen(T o) {
ob = o;
}

// Return ob.
T getob() {
return ob;
}
}

// A subclass of Gen.
class Gen2 extends Gen {

Gen2(String o) {
super(o);
}

// A String-specific override of getob().
String getob() {
System.out.print("You called String getob(): ");
return ob;
}
}

// Demonstrate a situation that requires a bridge method.
class BridgeDemo {
public static void main(String args[]) {

// Create a Gen2 Object for Strings.
Gen2 strOb2 = new Gen2("Generics Test");

System.out.println(strOb2.getob());
}
}



В программе класс Gen2 расширяет класс Gen, но делает это, используя версию класса Gen для типа String, как показано в его объявлении, приведенном далее:
class Gen2 extends Gen {
Более того, в классе Gen2 переопределен приведенный далее метод getob(), в нем задан тип String как тип возвращаемого методом объекта:
// Версия для типа String, переопределяющая метод getob()
String getob() {
System.out.print ("You called String getob(): ");
return ob;
}



Все перечисленные описания вполне корректны. Но из-за стирания информации о настраиваемом типе тип метода getob() будет следующим:
Object getob() {//...
Для обработки этой ситуации компилятор генерирует метод-подставку с только что приведенной сигнатурой, который вызывает версию этого же метода для типа String. Таким образом, если Вы просмотрите файл класса Gen2, полученный с помощью утилиты javap, то найдете в нем следующие методы:
class Gen2 extends Gen{
Gen2(Java.lang.String);
Java.lang.String getob();
java.lang.Object getob(); // метод-подставка
}




как видите, в перечне есть и метод-подставка (комментарий добавил автор, а не утилита javap).И последнее замечание о методах-подставках. Обратите внимание на то, что единственное различие между двумя методами getob() — тип возвращаемого ими объекта. Обычно такая ситуация вызывает ошибку, но поскольку она возникла не в Вашем исходном тексте, виртуальная машина Java (JVM) обрабатывает ее корректно, без каких-либо проблем.
Опубликовал Kest January 13 2009 00:56:08 · 0 Комментариев · 6125 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Разработка клиент...
Карта сайта
Язык программиров...
Bitmap [для кнопок]
HtmlLerz PRO
Cooltray
Библия для програ...
AddPage [Исходник...
Х. М. Дейтел, П. ...
Программирование ...
CLR via C#
Visual Basic for ...
EMSQuickImport
FreeSMS v1.3.1
Программирование ...
Scrrlcaptoin
Flud Vkontakte.ru
Microsoft Press -...
Приложение Клиент...
Импорт новостей ...

Топ загрузок
Приложение Клие... 100333
Delphi 7 Enterp... 79882
Converter AMR<-... 20025
Borland C++Buil... 10826
GPSS World Stud... 9760
Borland Delphi ... 7853
Turbo Pascal fo... 6910
Visual Studio 2... 4926
Калькулятор [Ис... 4133
FreeSMS v1.3.1 3488
Случайные статьи
Глава 10. Кратк...
Предопределены 4 у...
Процедура MoveTo -...
Задача 3
аутентификацию по ...
Замена защитного э...
см. обмен: службыа...
Чистка монитора, п...
Функция сохранени...
Шаблоны
Сохранение изображ...
GENERATE (ГЕНЕРИРО...
Раздел описания ме...
2.1.3. Структуры
Перегрузка операци...
Всё о баннерах
Настройка параметр...
Грузоперевозки Самара
Функция ядра
Структура жеста
Современная реализ...
от его имени
Протокол IEEE 802.1 X
Взлом Хотмыла
Помимо вызова акти...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?