Навигация
Главная
Поиск
Форум
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
Эмулятор микроп... 65535
Подключение Mic... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Программируемая... 65055
Invision Power ... 64202
Организация зап... 63514
Модуль Forms 60378
Создание отчето... 60355
ТЕХНОЛОГИИ ДОСТ... 56650
Пример работы с... 53772
Создание потоко... 52527
Имитационное мо... 52081
Реклама
Сейчас на сайте
Гостей: 11
На сайте нет зарегистрированных пользователей

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

Моделирование работы класса персональных компьютеров на GPSS + Отчет + Б...
Расчет размера дохода на одного человека в Turbo Pascal
Моделирование интернет магазина (Apache, Php, Html) на GPSS + Блок схема

Реклама



Подписывайся на 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 Комментариев · 6512 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Факториал [Исходн...
Отключение и вклю...
Visual Basic Script
Delphi 2005 Учимс...
WebReg v1.3
Assembler. Учебни...
Шифрование по алг...
JanReplace
Экранная лупа
SMExport
GPSS World Studen...
IPAddresseEdit
Медиа комбайн
PDJ_Anima
Реализация ЭЦП по...
AJAX и PHP. разра...
3D Октаэдр
Иллюстрированный ...
Visual Studio 200...
DateEdit

Топ загрузок
Приложение Клие... 100371
Delphi 7 Enterp... 82765
Converter AMR<-... 20046
Borland C++Buil... 11142
GPSS World Stud... 10703
Borland Delphi ... 8085
Turbo Pascal fo... 6969
Visual Studio 2... 4963
Калькулятор [Ис... 4314
FreeSMS v1.3.1 3510
Случайные статьи
Печать заголовков ...
Кубический и линей...
Метаданные и форма...
Малая вирусная энц...
Абстрактные типы д...
АБСТРАКТНЫЕ ТИПЫ Д...
Нерекурсивное созд...
Файлы посещений: м...
Класс TBitmap
Создание простейше...
2.3. Операторы
Invalid file name
tld и engineering,...
фальсифицированным...
Разрешить клиентам...
А вот что говоритс...
Как мне заблокиров...
Как модифицировать...
см. обмен: службыа...
Точка USR 2450, De...
Технология СС/РР
Где батут купить д...
Подсистема STREAMS
TOP 30 факторов, в...
Высокий трафик не ...
Статистика



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


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