Page 110 - 6253
P. 110

true,  якщо  об’єкт  з  якого  викликається  метод  еквівалентний  об’єкту,  що

            передається як аргумент.


                  boolean sameAvg(Generic<T> obj) {

                      if(average() == obj.average())

                          return true;

                      return false;

                  }


                  Хоча  таке  рішення  здається  цілком  логічним,  проте  на  практиці  воно

            працювати не буде. Проблема полягає в тому, що тип об’єкту, з якого викликається

            метод  повинен  співпадати  із  типом  об’єкту,  який  передається  як  аргумент.

            Наприклад,  якщо  об’єкт,  який  викликає  метод  має  тип  Double,  то  параметр  obj

            також повинен бути типу Double.



                  У  цьому  випадку,  єдиним  правильним  рішенням  є  використання  шаблонів

            аргументів. Шаблон аргументів вказується через символ «?» та представляє собою

            невідомий  тип  даних.  Розглянемо  приклад  у  якому  демонструється  використання

            шаблону аргументів.


                  // Використання шаблону аргументів

                  class Generic <T extends Number> {

                      T[] nums;



                      Generic(T[] о) {

                          nums = о;


                      }

                      double average() {

                          double sum = 0.0;

                          for(int i=0; i < nums.length; i++) {

                               sum += nums[i].doubleValue();

                          }

                          return sum/nums.length;




                                                              109
   105   106   107   108   109   110   111   112   113   114   115