Java Урок 65: ОБОБЩЕНИЯ, коллекции и обобщения

Вероятно, в наибольшей степени влияние обобщений испытали на себе коллекции.

Скачать исходники для статьи можно ниже

Реально более 90 процентов случаев, когда вы будите сталкиваться с обобщениями это обобщения в коллекциях.

После появления обобщений все коллекции были полностью перепроектированы. Теперь все коллекции изначально обобщены и многие методы, оперирующие коллекциями, также принимают обобщенные параметры.
Обобщения это то, чего не хватало коллекциям. Это – безопасность типов.
Раньше все коллекции хранили ссылки на класс Object, а это означало, что любая коллекция могла хранить объекты любого типа. Таким образом, можно было непреднамеренно сохранить несовместимые типы в одной коллекции. Это могло привести к ошибкам несовместимости типов во время выполнения.

Пример:

public class Main {
   public static void main(String[] args) {
      Car car1 = new Car("KIA");
      Car car2 = new Car("AUDI");
      Car car3 = new Car("RENO");
      BMW bmw1 = new BMW("BMW 5x", 10000);
      BMW bmw2 = new BMW("BMW 4x", 9000);
      BMW bmw3 = new BMW("BMW 3x", 8000);
      ArrayList<Car> carArray = new ArrayList<>();
      carArray.add(car2);
      carArray.add(car1);
      carArray.add(bmw2);
      carArray.add(car3);
      ArrayList<BMW> bmwArray = new ArrayList<>();
      bmwArray.add(bmw3);
      bmwArray.add(bmw1);
      bmwArray.add(bmw2);

      Main.outArray1(carArray);
      System.out.println();
      Main.outArray1(bmwArray);
      System.out.println();
      Main.outArray2(bmwArray);
   }

   static public void outArray1(ArrayList<? extends Car> carAr) {
      for (Car c : carAr) {
         System.out.println(c.name);
      }
   }

   static public void outArray2(ArrayList<BMW> carA) {
      for (BMW c : carA) {
         System.out.println(c.name + " " + c.cost + " рублей");
      }
   }
}

public class Car {
   String name;

   Car(String name) {
      this.name = name;
   }
}

public class BMW extends Car {
   int cost;

   BMW(String name, int cost) {
      super(name);
      this.cost = cost;
   }
}

Программа имеет следующий выход:
AUDI
KIA
BMW 4x
RENO

BMW 3x
BMW 5x
BMW 4x

BMW 3x 8000 рублей
BMW 5x 10000 рублей
BMW 4x 9000 рублей

Добавить комментарий