РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
88 of 1163 menu

Ограничение super

Ограничение super в дженериках Java задает нижнюю границу типа. Это означает, что тип-параметр может быть либо указанным типом, либо его предком (супертипом). Такое ограничение чаще всего применяется к wildcard-символам и позволяет безопасно добавлять элементы в коллекцию. В отличие от ограничения extends, которое задает верхнюю границу и разрешает только чтение, ограничение super разрешает запись. Синтаксически оно записывается как ? super T, где T - это нижняя граница типа.

Синтаксис

<? super Type>

В параметрах метода ограничение super используется в составе wildcard-символа:

public void method(List<? super Integer> list)

Пример

Давайте создадим метод, который принимает список с нижней границей Integer и добавляет в него число:

import java.util.List; import java.util.ArrayList; public class Main { public static void addNumber(List<? super Integer> list) { list.add(42); } public static void main(String[] args) { List<Number> list = new ArrayList<>(); addNumber(list); System.out.println(list); } }

Результат выполнения кода:

[42]

Пример

Давайте передадим в метод список с типом Object, который также является супертипом для Integer:

import java.util.List; import java.util.ArrayList; public class Main { public static void addNumber(List<? super Integer> list) { list.add(100); list.add(200); } public static void main(String[] args) { List<Object> list = new ArrayList<>(); addNumber(list); System.out.println(list); } }

Результат выполнения кода:

[100, 200]

Пример

Давайте попробуем прочитать элемент из списка с ограничением super. Чтение возможно только в тип Object, так как точный тип элемента неизвестен:

import java.util.List; import java.util.ArrayList; public class Main { public static Object getFirst(List<? super Integer> list) { return list.get(0); } public static void main(String[] args) { List<Number> list = new ArrayList<>(); list.add(123); Object res = getFirst(list); System.out.println(res); } }

Результат выполнения кода:

123

Смотрите также

  • ограничение extends,
    которое задает верхнюю границу типа
  • wildcard super,
    который применяет нижнюю границу в параметрах
  • wildcard,
    который обозначает неизвестный тип
  • контравариантность,
    которая лежит в основе ограничения super
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить