Page 103 - 6253
P. 103
Розглядаючи попередній приклад, тип Integer, записаний в кутових дужках –
це аргумент типу, який передається через параметр типу Т класу Generic, в якому
усі посилання на тип Т транслюються в посилання на тип Integer. Тобто, в цьому
оголошенні об'єкт obj має тип Integer, і тип значення, що повертається методом
getOb() також має тип Integer.
Аргумент, що передається як параметр типу, повинен бути типом класу. Не
можна використовувати, в ролі параметра типу елементарні типи даних такі як int,
double або char. Наприклад, класу Generic можна передати через параметр Т
будь-який тип класу, але не можна передати елементарний тип.
Тому, для передачі елементарних типів даних використовуються відповідні
оболонки типів, а механізм автоматичної упаковки та розпаковки робить цю задачу
максимально простою.
Як, уже було сказано, існує клас Object, який є вершиною ієрархії у мові Java.
Він дозволяє створити посилання через яке можна звертатися до об’єктів будь-якого
типу. Так в чому ж тоді полягає перевага узагальнень перед використанням класом
Object? Відповідь на це питання полягає в тому, що узагальнення автоматично
гарантують безпеку типів в усіх операціях де використовується узагальнений клас.
В процесі роботи з таким класом виключається необхідність явного приведення
типів і їх ручної перевірки в коді програми.
Розглянемо приклад, в якому використовується неузагальнений еквівалент
класу Generic.
// Створення неузагальненого еквіваленту класу Generic
class NonGeneric {
Object obj; // Оголошення об'єкту типу Object
// Передача конструктору посилання на об'єкт типу Object
NonGeneric(Object о) {
obj = о;
}
102