Java Generics — Free Java Tutorial
Learn Java Generics in Java with a free, beginner-friendly tutorial, examples and practice for Indian students on Syllab.in.
TL;DR: Learn Java Generics in Java with a free, beginner-friendly tutorial, examples and practice for Indian students on Syllab.in.
Written & reviewed by the Syllab.in Academic Team (CBSE/NCERT subject experts) · Updated
Java Generics in Java
Generics allow you to write code that works with any type, specified at compile time. They provide type safety without casting: List<String> vs raw List.
Generic class: class Box<T> { T value; }. Generic method: <T> T getFirst(List<T> list). Use extends for bounds: <T extends Number> means T must be a Number or subclass.
Wildcards: List<?> accepts any type. List<? extends Number> accepts any Number subtype (read-only). List<? super Integer> accepts Integer or any parent (write-only).
Generics are erased at runtime (type erasure) — they exist only at compile time for type checking. At runtime, a List<String> is just a List.
Java Generics — Syntax
// Generic class
class Pair<A, B> {
private A first;
private B second;
Pair(A first, B second) { this.first = first; this.second = second; }
}
// Generic method
public static <T extends Comparable<T>> T max(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
// Bounded wildcard
public static double sum(List<? extends Number> list) {
return list.stream().mapToDouble(Number::doubleValue).sum();
}
Learn Java Generics step by step with Syllab's free interactive Java tutorial — runnable code examples, practice exercises and instant AI feedback, all free with no signup. Explore the full Java course →