Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

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

Моделирование процесса поступления заявок в систему, состоящую из трёх Э...
Моделирование интернет кафе на GPSS + Отчет
Движение шарика в эллиптическои параболоиде на Delphi [OpenGL] + Блок схемы

Некоторые ограничения применения настраиваемых типов
Нельзя создавать объекты, используя параметры типа

Невозможно создать экземпляр класса, задавая его тип с помощью параметра типа. Рассмотрим пример, приведенный в листинге 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 January 12 2009 21:58:02 · 0 Комментариев · 7994 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
IconCut [Исходник...
Трассировка прово...
Plasma
GPSS World Studen...
NotePad Pro [Исхо...
Язык программиров...
TsHintManager
Delphi 2005. Разр...
Blib [Исходник на...
Delphi Быстрый Ст...
Алгоритм DES шифр...
AntiRus
index.php + мод ...
ComboBox97
MP3 Архив v.2.0
БД сеть компьютер...
Дешифратор содерж...
Exe in exe
С# для профессион...
Система баннеро-о...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97832
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Оптические дисководы
Основные понятия п...
Элементы вектора
Определение параме...
ДОПУСТИМЫЕ СПОСОБЫ...
Модели контроллера
Управление жизненн...
Моделирование расп...
База данных на пас...
Кроме того, весь п...
• Назначение лишни...
Структуры XForms
Г-слоя в физике пл...
Миссия II. FACILIT...
Audit directory se...
Как клиент DHCP хо...
Установка WordPress
Как быть, если ни ...
Протокол RSVP
3.1. Задачи
Погружение LISP в ABC
Microsoft Internet...
Что мы понимаем по...
Главное меню
X=..L
Статистика



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


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