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

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

Моделирование автомойки на GPSS + Отчет + Блок схемы
Моделирование информационно-поисковой библиографической системы на gpss ...
Моделирование работы ЭВМ на GPSS + Пояснительная записка

Реклама



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

ПОДПИСЫВАЙСЯ на канал о программировании
Некоторые ограничения применения настраиваемых типов
Нельзя создавать объекты, используя параметры типа

Невозможно создать экземпляр класса, задавая его тип с помощью параметра типа. Рассмотрим пример, приведенный в листинге 3.23.

Листинг 3.23. Нельзя с помощью параметра типа T создать объект
class Gen {
T ob;
Gen() {
ob = new T(); // Illegal!!!
}
}



В листинге 3.23 сделана недопустимая попытка создания экземпляра типа T. Причину легко понять: поскольку параметра типа T во время выполнения не существует, как компилятор узнает объект какого типа нужно создать? Напоминаю о том, что в процессе компиляции происходит стирание всех параметров типа.
Ограничения для статических членов класса

Ни один статический член класса не может использовать параметр типа, объявленный этим классом. Все статические члены класса, приведенного в листинге 3.24, недопустимы.

Листинг 3.24. Пример недопустимых членов класса
class Wrong {
// Wrong, no static variables of type T.
static T ob;

// Wrong, no static method can use T.
static T getob() {
return ob;
}

// Wrong, no static method can access Object
// of type T.
static void showob() {
System.out.println(ob);
}
}




Несмотря на то, что нельзя объявить статические члены, использующие параметры типа, объявленные в охватывающем классе, Вы можете объявлять статические настраиваемые методы, которые определяют собственные параметры типа, как было показано ранее в этой главе.

Ограничения для настраиваемого массива
Есть два важных ограничения применения настраиваемых типов, касающиеся массивов. Во-первых, нельзя создать экземпляр массива, у которого базовый тип задан с помощью параметра типа. Во-вторых, Вы не можете создать массив из ссылок на объекты конкретной версии настраиваемого типа. В листинге 3.25 показаны обе ситуации.

Листинг 3.25. Настраиваемые типы и массивы
class Gen {
T ob;

T vals[]; // OK

Gen(T o, T[] nums) {
ob = o;

// This statement is illegal.
// vals = new T[10]; // can't create an array of T

// But, this statement is OK.
vals = nums; // OK to assign reference to existent array
}
}

class GenArrays {
public static void main(String args[]) {
Integer n[] = { 1, 2, 3, 4, 5 };

Gen iOb = new Gen(50, n);

// Can't create an array of type-specific generic references.
// Gen gens[] = new Gen[10]; // Wrong!

// This is OK.
Gen gens[] = new Gen[10]; // OK
}
}




Как показано в листинге 3.25, можно объявить ссылку на массив типа T, такую как в следующей строке:
Т valsU; // OK
Но нельзя создать массив из элементов типа T, подобно попытке, приведенной в следующей помеченной как комментарий строке:
// vals = new T[10]; // не может создать массив из объектов типа Т
Вы не можете создать массив из элементов типа T, потому что параметр T не существует во время выполнения, и у компилятора нет способа узнать, массив из элементов какого типа формировать в действительности.
Тем не менее, можно передать ссылку на совместимый по типу массив в конструктор Gen. о при создании объекта и присвоить эту ссылку переменной vai, как показано в следующей строке:
vals = nums // можно присвоить ссылку существующему массиву
Приведенная строка выполнится, потому что у массива, переданного в класс Gen, известен тип, который в момент создания объекта будет таким же, как параметр типа T.
Внутри метода main() Вы не можете объявить массив ссылок на конкретную версию настраиваемого типа. Следующая строка:
// Gen gens[] = new Gen[10]; // Неверно!
не будет компилироваться. Массивы из элементов конкретной версии настраиваемого типа просто не разрешены, поскольку могут привести к потере типовой безопасности.
Однако Вы можете создать массив из ссылок на настраиваемый тип, если используете метасимвол, как показано в следующей строке:
Gen gens[] = new Gen[10]; // OK
Такой подход предпочтительней, чем использование массива из элементов несформированного (raw) типа, так как, по крайней мере, какой-то контроль типов будет выполнен.
Ограничение настраиваемых исключений
Настраиваемый класс не может расширять класс Throwable. Это означает, что у Вас нет возможности создавать настраиваемые классы исключений.
Заключительные замечания
Настраиваемые типы — мощное расширение языка Java, потому что они упрощают создание повторно используемого кода, обладающего типовой безопасностью. Несмотря на то, что, на первый взгляд, синтаксис настраиваемых типов может показаться несколько устрашающим, он станет Вашей второй натурой, после того, как Вы поработаете с ним какое-то время. Откровенно говоря, код с применением настраиваемых типов — это неотъемлемая часть будущего всех программистов, пишущих на языке Java
Опубликовал Kest Январь 13 2009 00:58:02 · 0 Комментариев · 7095 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Trojan [Исходник ...
Strawberry Prolog...
CwstatusBar
DateEdit
Рисование PopupMenu
Пользовательская...
Dynamic Titles дл...
Task Shedule
PHP5. Профессиона...
Assembler. Практикум
C++ Builder 6 СПР...
CarGame [Исходник...
MiniChat
PRNDbgrid
MxProtector
Delphi Быстрый Ст...
Tank [Исходник на...
Функции Visual Basic
Delphi. Готовые а...
Игра "Астероиды" ...

Топ загрузок
Приложение Клие... 100652
Delphi 7 Enterp... 94841
Converter AMR<-... 20174
GPSS World Stud... 16532
Borland C++Buil... 13763
Borland Delphi ... 9635
Turbo Pascal fo... 7211
Калькулятор [Ис... 5505
Visual Studio 2... 5107
FreeSMS v1.3.1 3609
Случайные статьи
Б-деревья
Функция GraphResul...
Дополнительные виз...
Класс TMetafile
Дополнительная инф...
клиент/сервер с кл...
Игровые автоматы к...
Развитие мультимед...
СТАНДАРТНЫЕ ЧИСЛОВ...
7.12. Отображение...
Дополнительные инс...
KIMPIS
Социальные сети.
Применение средств...
Лучшая реклама слу...
Плотность изображе...
ЧТО такое XSL
Duplicate dynamic ...
Circular unit refe...
Работа с Cookies н...
Блок TEST
Основы сетевой рек...
Получи www.anythin...
Фил ьтрация группо...
Опыт оптимизации
Статистика



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


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