Page 102 - 4836
P. 102

Звичайно, це може призвести і до труднощів. Якщо ви
                            захочете здійснювати якісь операції над елементом колекції (а
                            ви  ставите  в  колекцію  об'єкти  саме  для  того,  щоб  потім  їх
                            витягувати  і  обробляти),  ви  не  зможете  скористатися  його
                            методами,  якщо  не  привести  об'єкт  до  його  «справжнього»
                            класу за допомогою явного приведення типів.
                                   Наприклад,  у  вас  є  об'єкт  класу  String  (звичайний
                            рядок)  і  ви  хочете  додати  його  в  стек  stack  за  допомогою
                            методу push (Object item):
                                   String str = " Особливий рядок ";
                                          stack.push (str);
                                   Колекція, що зберігає елементи типу Object, відразу ж
                            «забуває», що ваш об'єкт - рядок, оскільки при його додаванні
                            було  здійснено  автоматичне  приведення  типу  String  до  типу
                            Object. Ви можете витягти ваш об'єкт методом pop( ), але щоб
                            повернути  йому  колишній  тип  (а  без  цього  ви  не  зможете
                            скористатися  жодним  з  його  методів),  доведеться  здійснити
                            явне перетворення оператором (String) :
                                   str = (String) stack.pop();
                                   Це не є проблемою, просто потрібно пам'ятати, об'єкти
                            якого  класу  ви  ставите  в  колекцію  і  виконувати  відповідне
                            перетворення  типу  над  кожним  елементом,  який  побував  у
                            колекції.
                                   Але     якщо     спробувати      привести     об'єкт   до
                            неправильного типу, виникне помилка в програмі:
                                   stack.push  (new  Dog  ("Шарик  ",  12))  ;  //  Поміщаємо в
                            стек собаку
                                   str  =  (Mouse)  stack.pop  ();  //  Виймаємо  собаку  і
                            намагаємося оголосити  її  мишкою,  але  ці  класи  не  пов'язані
                            спадкуванням і програма видасть помилку під час виконання.
                                   Так що, можливістю поміщати в колекцію будь-які
                            об'єкти, скористатися швидше за все не вийде. Уявіть собі,
                            що ваша програма повинна «пам'ятати», що перший елемент
                            списку  -  рядок,  другий  -  число,  третій  -  собака,  четвертий  -




                                                           100
   97   98   99   100   101   102   103   104   105   106   107