Skip to content

Latest commit

 

History

History
56 lines (40 loc) · 1.17 KB

File metadata and controls

56 lines (40 loc) · 1.17 KB

PECS - Producer Extends Consumer Super

Принцип работает следующим образом:

Для списка List<? extends Class1> list:

  • можно получить только объекты суперклассов
  • нельзя ничего положить

Для списка List<? super Class1> list:

  • Можно получить только объекты типа Object
  • можно положить объекты подклассов класса Class1

Примеры:

  • List<? extends Number> values = new ArrayList<>();

Корректно:

Number v = values.get(0);
Object o = values.get(0);

Не компилируются:

values.add(new Integer(1));
values.add(new Double(1));

Number n = new Integer(2);
values.add(n);

Serializable s = new Integer(3);
values.add(s);
  • List<? super Number> values = new ArrayList<>();

Корректно:

values.add(new Integer(1));
values.add(new Double(1));

Number n = new Integer(2);
values.add(n);

Object o = values.get(0);

Не компилируются:

Serializable s = new Integer(3);
values.add(s);

Number v = values.get(0);