Навигация
Главная
Поиск
Форум
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
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65061
Модуль Forms 64836
Пример работы с... 63242
ТЕХНОЛОГИИ ДОСТ... 61551
Имитационное мо... 57391
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы
Программа тестирования (тест) - вступительные экзамены (математика, физи...
Моделирование автомойки на GPSS + Отчет + Блок схемы

Реклама



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

ПОДПИСЫВАЙСЯ на канал о программировании
Создание настраиваемого метода
Как показано в предыдущих примерах, методы в настраиваемых классах могут использовать параметр типа и таким образом автоматически становятся настраиваемыми по отношению к этому параметру типа. Однако можно и объявить настраиваемый метод (generic method) с одним или несколькими собственными параметрами типа. Более того, есть возможность создать настраиваемый метол внутри ненастраиваемого класса.
Начнем с примера. В программе из листинга 3.8 объявляется ненастраивае-мый класс, названный GenMethDemo, и внутри класса статический настраиваемый метод с именем isIn (). Метод isIn ( ) определяет, является ли объект элементом массива. Он может использоваться с объектом любого типа и любым массивом, при условии, что массив содержит объекты, тип которых сопоставим с типом проверяемого объекта.
Листинг 3.8. Демонстрация простого настраиваемого метода
class GenMethDemo {
// Определяет, является ли объект элементом массива.
static boolean isIn(T x, V[] y) {

for(int i=0; i < y.length; i++)
if(x.equals(y[i])) return true;

return false;
}

public static void main(String args[]) {
// Использует метод isin() для объектов типа Integer.
Integer nums[] = { 1, 2, 3, 4, 5 };

if(isIn(2, nums))
System.out.println("2 is in nums");

if(!isIn(7, nums))
System.out.println("7 is not in nums");

System.out.println();
// Использует метод isIn() для объектов типа String.
String strs[] = { "one", "two", "three",
"four", "five" };

if(isIn("two", strs))
System.out.println("two is in strs");

if(!isIn("seven", strs))
System.out.println("seven is not in strs");
// Opps! He откомпилирует, поскольку типы не совместимы.
// if(isln("two", nums})
// System.out.println("two is in strs”);
}
}



Далее приведен вывод результатов работы программы из листинга 3.8:
2 is in nums
7 is not in nums
two is in strs
seven is not in strs



Рассмотрим подробно метод isIn(). Во-первых, обратите внимание на его объявление, приведенное в следующей строке:
static boolean isIn(T х, V[] у) {



Параметры типа указаны перед типом значения, возвращаемого методом. Во-вторых, обратите внимание на то, что параметр типа v ограничен сверху параметром типа т. Следовательно, тип параметра v должен быть таким же, как у параметра T или классом, производным от T. Описанная взаимосвязь параметров обеспечивает вызов метода isIn( ) с аргументами, сопоставимыми друг с другом. Отметьте также то, что метод isIn( ) статический, т. е. может вызываться независимо от какого-либо объекта. Однако настраиваемые методы могут быть как статическими, так и нестатическими, на этот счет нет никаких ограничений.
Теперь рассмотрим как метод isIn () вызывается в методе main ( ) с использованием обычного синтаксиса вызова без необходимости указания аргументов типа. Это возможно благодаря тому, что типы аргументов распознаются автоматически и типы Т и V настраиваются соответственно. Например, в первом вызове:
if(isIn(2, nums))



тип первого аргумента — Integer (в результате автоупаковки), что вызывает замену типа T классом Integer, Базовый тип второго аргумента тоже Integer, что в свою очередь ведет к замене параметра V классом Integer.
Во втором вызове используется тип String, и параметры T и V заменяются классом String.
Теперь рассмотрим строки комментария приведенные далее:
// if(isIn("two", nums))
// System.out.println("two is in strs");



Если Вы удалите знаки комментария и попробуете откомпилировать программу, то получите сообщение об ошибке. Причина заключается в том, что параметр типа v ограничен типом T с помощью ключевого слова extends при объявлении параметра V. Это означает, что тип параметра V должен быть таким же, как тип параметра T или классом, производным от типа T. В нашем случае у первого аргумента тип — String, заменяющий T классом String, а у второго аргумента тип Integer который не является подклассом типа String. Подобная ситуация приводит к появлению ошибки несовместимости типов на этапе компиляции. Описанная способность обеспечения типовой безопасности — одно из важнейших преимуществ настраиваемых методов.
Далее приведена синтаксическая запись для настраиваемого метода:
ret-type meth-name(param-list) { //...
type-param-list всегда представляет собой разделенный запятыми список параметров типа. Обратите внимание на то, что у настраиваемых методов этот список предшествует типу значения, возвращаемого методом.
Опубликовал Kest January 13 2009 00:47:45 · 0 Комментариев · 5777 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Применение жадног...
Matrix2D
Программа для рис...
Averaging [Исходн...
Алгоритм трассиро...
Исправление проц...
Технология .Net в VB
Самоучитель PHP 4
EMSQuickImport
Работа с матрицами
Мод "проверочный ...
PBEditPack
Язык программиров...
Библия хакера 2 К...
AddPage [Исходник...
Базы данных в Инт...
Counter [Исходник...
Разработка Web-пр...
Язык программиров...
Генетический алго...

Топ загрузок
Приложение Клие... 100466
Delphi 7 Enterp... 86620
Converter AMR<-... 20077
GPSS World Stud... 12642
Borland C++Buil... 11755
Borland Delphi ... 8555
Turbo Pascal fo... 7037
Visual Studio 2... 4998
Калькулятор [Ис... 4760
FreeSMS v1.3.1 3541
Случайные статьи
Прерывание и обраб...
Создание рабочей к...
Работа с динамиче...
Антипаттерны запросов
Оператор присваивания
связи
Отсоединенный набо...
Язык С: макросы, п...
Выполнение функций...
стр. 445 Ответы на...
3. Какие службы ну...
Стеки как структур...
Форматирование вво...
Сайты для платного...
Основные понятия п...
Определение версии...
Как вычислить адре...
Причины хранения и...
Пишем программу мо...
Что Delphi знает о...
11.4. Принципы
Что означает равен...
Описание спонсоров
ДЫРЯВЫЕ АБСТРАКЦИИ
Системы множествен...
Статистика



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


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