Навигация
Главная
Поиск
Форум
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
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 61545
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

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

База данных склада на Delphi + Схема БД
Обработка задач на ЭВМ на GPSS + Пояснительная записка
Моделирование работы обрабатывающего участка цеха в 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 Январь 13 2009 00:47:45 · 0 Комментариев · 6139 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Dnavigator
Pirc
ProLIB18
Pro-Download Sys...
Globus VCL Extent...
Работа с матрицами
Indy in Depth Глу...
Preview
Battle.Net - мони...
Библиотека програ...
FileFind
около 291 статьи ...
Run
AntiRus
WAP версия сайта
Усложнённый кальк...
Программирование ...
Самоучитель PHP 4
TrayComp
PHP 5 для "чайников"

Топ загрузок
Приложение Клие... 100552
Delphi 7 Enterp... 93002
Converter AMR<-... 20116
GPSS World Stud... 15849
Borland C++Buil... 13348
Borland Delphi ... 9345
Turbo Pascal fo... 7133
Калькулятор [Ис... 5299
Visual Studio 2... 5047
FreeSMS v1.3.1 3570
Случайные статьи
Умеете ли вы делат...
Audit directory se...
шифрования для фай...
Жесткие диски
Упорядоченные деревья
Дешифрация отдельн...
7.2. Оценка произв...
Пион уклоняющийся ...
СВОЙСТВО ИЛИ ПОЛЕ?
Авторизация на сай...
Процедура OutText ...
Задачи для проверки
Знаки пунктуации
Циклические коды и...
Поимей халявный Ин...
Реализация динамич...
Логические схемы а...
Типы данных
Разработка Web-фор...
Информационные и с...
Оформление гиперсс...
Беспроводные средс...
БИОГРАФИЯ ХАКА
Оценка точности оп...
Глава 1. СОМ как у...
Статистика



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


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