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
   98   99   100   101   102   103   104   105   106   107   108