Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 22
На сайте нет зарегистрированных пользователей

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

Моделирование работы класса персональных компьютеров на GPSS + Отчет + Б...
Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...
Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...

Ошибки неоднозначности
Введение настраиваемых типов породило новую категорию ошибок, которых Вы должны беречься, ошибки неоднозначности (ambiguity errors). Такая ошибка возникает, когда механизм стирания вызывает два на вид отличающихся объявления настраиваемых типов для удаления информации об одном типе, порождая тем самым конфликт. В листинге 3.22 приведен пример, содержащий переопределение метода.

Листинг 3.22. Неоднозначность, вызванная стиранием в переопределенных методах
class MyGenClass {
T ob1;
V ob2;

// ...

// These two overloaded methods are ambiguous.
// and will not compile.
void set(T o) {
ob1 = o;
}

void set(V o) {
ob2 = o;
}
}



Обратите внимание на то, что класс MyGenClass содержит объявления двух настраиваемых типов: T и V. В классе MyGenClass делается попытка переопределения метода set(), основанного на параметрах типа T и V. Это выглядит разумным, так как кажется, что T и V — разные типы. Но при этом возникает два вида неоднозначности.
Во-первых (судя по описанию класса MyGenClass), не требуется, чтобы типы T и V всегда были разными. Например, приведенное далее создание объекта класса MyGenClass — совершенно правильно (в принципе):
MyGenClass obj = new MyGenClass()
В этом случае и T, и V замещаются типом String. Это делает обе версии метода set() одинаковыми, что, конечно же, является ошибкой.
Во-вторых, и это более существенно, стирание информации о типе превратит обе версии метода set () в следующую:
void set(Object о)
Таким образом, переопределение метода set (), которое делается в классе MyGenClass, — в основе своей неоднозначно.
Ошибки неоднозначности бывает трудно обнаружить. Например, если Вы знаете, что параметр типа V всегда будет некоторым типом String, можно попробовать переписать объявление класса MyGenClass следующим образом:
MyGenClass { //почти хорошо!
Это изменение позволит откомпилировать класс MyGenClass и Вы даже сможете создавать объекты класса, такие как приведенный в следующей строке:
MyGenClass x = new MyGenClass();
Это работающий вариант, потому что Java безошибочно определяет, какой метод следует вызывать. Но неоднозначность вернется, как только Вы попробуете ввести следующую строку:
MyGenClass< String, String> х = new MyGenClass< String, String>();
В данном случае, поскольку и у T, и у V — тип String, какую версию метода set() вызывать?
Откровенно говоря, в листинге 3.22 гораздо лучше использовать два метода с разными именами, чем пытаться переопределять метод set(). Часто разрешение неоднозначности приводит к переработке кода, поскольку неоднозначность или неопределенность зачастую свидетельствует о концептуальной ошибке в вашем проекте.
Опубликовал Kest January 12 2009 21:56:47 · 1 Комментариев · 7751 Прочтений · Для печати

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


Комментарии
Krieger October 04 2023 04:55:48
smileysmileysmileysmiley
Добавить комментарий
Имя:



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

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

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

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

Пароль



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

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

Случайные загрузки
Задача о 8ми ладьях
Flud Vkontakte.ru
SMLPack v1.0
Создание оригинал...
Создание Web-сайт...
EMS QuickExport S...
Анекдоты с ostrie.ru
mmmJlabel
Мониторинг сервер...
Программа для рис...
Экспорт базы данн...
Графика в проекта...
PDA версия сайта
Время загрузки ...
Пример OpenGL гра...
Delphi 2005 Учимс...
Язык программиров...
Drag&Drop
Язык программиров...
Факториал [Исходн...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20261
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Динамические считы...
Тематические блоги...
Преимущества казин...
Табл. 3. Анализ те...
«Манипулятор» для ...
Аргументы переменн...
Настройка зон безо...
Курс информатики д...
Алгоритм замены ст...
Медицинские системы.
Эмуляция директивы...
Обеспечение доступ...
На обрабатывающий ...
Простейший алгорит...
Пакетный режим
Алгоритмы внутренн...
Адресация по базе ...
Сквозная запись
Линии не имели общ...
Система SVR4
Too many files
Pin-Up - бонусы он...
в кадре использует...
Установка и настро...
Введение в регуляр...
Статистика



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


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