Generic-метод
Generic-метод - это метод, который объявляет собственный параметр типа и может работать с разными типами данных без потери типобезопасности. Параметр типа указывается в угловых скобках перед возвращаемым типом метода. В первый параметр обычно передаётся значение обобщённого типа, во второй - другое значение того же типа, а результатом может быть значение, коллекция или другой объект, зависящий от типа T. В отличие от generic-класса, параметр типа объявляется непосредственно у метода и действует только внутри него.
Синтаксис
public static <T> T methodName(T value)
{
return value;
}
Пример
Давайте создадим generic-метод, который принимает два значения одного типа и возвращает первое из них:
public class Main
{
public static <T> T first(T a, T b)
{
return a;
}
public static void main(String[] args)
{
String res1 = first("abcde", "12345");
Integer res2 = first(1, 2);
System.out.println(res1);
System.out.println(res2);
}
}
Результат выполнения кода:
"abcde"
1
Пример
Давайте создадим generic-метод, который принимает список элементов типа T и возвращает последний элемент:
import java.util.List;
public class Main
{
public static <T> T last(List<T> list)
{
return list.get(list.size() - 1);
}
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
String res = last(list);
System.out.println(res);
}
}
Результат выполнения кода:
"e"
Пример
Давайте создадим generic-метод с ограничением типа, который принимает число типа T и возвращает его удвоенное значение:
public class Main
{
public static <T extends Number> double twice(T value)
{
return value.doubleValue() * 2;
}
public static void main(String[] args)
{
double res1 = twice(5);
double res2 = twice(1.5);
System.out.println(res1);
System.out.println(res2);
}
}
Результат выполнения кода:
10.0
3.0
Смотрите также
-
параметр типа
type-param,
который объявляет обобщённый тип -
type-params,
которые позволяют указать несколько параметров типа -
extends-bound,
который ограничивает параметр типа сверху -
generic-ctor,
который объявляет обобщённый конструктор