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

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

Ограничение extends применяется в обобщениях Java для задания верхней границы типа. Оно говорит компилятору, что вместо параметра типа T можно подставить только сам указанный тип или любой его наследник. В первом параметре после ключевого слова extends указывается класс, интерфейс или другой параметр типа, который становится верхней границей. Благодаря этому внутри обобщенного кода разрешается вызывать методы верхней границы, а также безопасно возвращать значения типа T как значения границы.

Синтаксис

<T extends Bound> <T extends Bound1 & Bound2>

Пример

Давайте создадим обобщенный класс Box с ограничением T extends Number и вызовем у значения метод doubleValue, доступный благодаря границе:

public class Main { static class Box<T extends Number> { private T value; public Box(T value) { this.value = value; } public double asDouble() { return value.doubleValue(); } } public static void main(String[] args) { Box<Integer> box = new Box<>(12345); System.out.println(box.asDouble()); } }

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

12345.0

Пример

Давайте напишем обобщенный метод sum с ограничением T extends Number, который складывает два числа и возвращает результат в виде double:

public class Main { public static <T extends Number> double sum(T a, T b) { return a.doubleValue() + b.doubleValue(); } public static void main(String[] args) { System.out.println(sum(1, 2)); System.out.println(sum(1.5, 2.5)); } }

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

3.0 4.0

Пример

Давайте используем ограничение с несколькими границами через &: тип должен быть наследником класса Number и реализовывать интерфейс Comparable:

public class Main { public static <T extends Number & Comparable<T>> T max(T a, T b) { if (a.compareTo(b) >= 0) { return a; } else { return b; } } public static void main(String[] args) { System.out.println(max(1, 2)); System.out.println(max(12345, 54321)); } }

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

2 54321

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

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