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 рублей

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

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