Generic Methods

Type Parameter on a Method

A generic method declares its own type parameter before the return type: static <T> void printAll(List<T> items). The compiler infers T from the arguments.

Example

import java.util.ArrayList;
import java.util.List;

public class Main {
    static <T> T firstOrDefault(List<T> list, T fallback) {
        return list.isEmpty() ? fallback : list.get(0);
    }

    static <T> List<T> repeat(T item, int times) {
        List<T> result = new ArrayList<>();
        for (int i = 0; i < times; i++) result.add(item);
        return result;
    }

    static <K, V> void printPair(K key, V value) {
        System.out.println(key + " = " + value);
    }

    public static void main(String[] args) {
        System.out.println(firstOrDefault(List.of("Mumbai", "Delhi"), "none"));
        System.out.println(firstOrDefault(new ArrayList<Integer>(), -1));
        System.out.println(repeat("ha", 3));
        printPair("pin", 560001);
        System.out.println(Main.<Double>repeat(1.5, 2));   // explicit type argument (rarely needed)
    }
}

Output

Mumbai
-1
[ha, ha, ha]
pin = 560001
[1.5, 1.5]