Java Generics
Generics in Java is a feature that allows you to write code that can handle different types of data in a type-safe and reusable manner. Generics provide a way to define classes, interfaces, and methods with type parameters, which increases code reusability, type safety, and readability.
Types of Generics
1. Generic Classes
A generic class allows you to define a class with a type parameter.
1 | public class Box<T> { |
In this example, Box
is a generic class where <T>
denotes the type parameter. When creating a Box
object, you specify the actual type, such as Box<Integer>
or Box<String>
.
2. Generic Methods
A generic method allows you to define a method with a type parameter.
1 | public class Main { |
In this example, findMax
is a generic method using <T>
to specify the type parameter. It can accept arrays of any type that implements the Comparable
interface and find the maximum value.
3. Generic Interfaces
A generic interface allows you to define an interface with a type parameter.
1 | public interface MyListInterface<T> { |
Generic Wildcards
Wildcards in Java generics provide flexibility when using generic types. They are often used with generic classes, methods, and interfaces to handle different types of data.
Types of Wildcards
- Unbounded Wildcard
?
: Represents any type.
1 | public void printList(List<?> list) { |
- Bounded Wildcard
? extends T
: Represents any type that is a subclass ofT
.
1 | public static double sumOfList(List<? extends Number> list) { |
Wildcard Usage Notes
- Wildcards represent an unknown type and ensure type safety by only allowing read operations.
- Writing to a wildcard collection is not allowed to maintain type safety.
1 | public void writeToList(List<?> list) { |
Summary
Generics in Java enhance code reusability and type safety by allowing you to write classes, interfaces, and methods that can operate on different types of data. They ensure that your code is flexible, readable, and less error-prone by providing compile-time type checking. Understanding how to use generic classes, methods, interfaces, and wildcards effectively is crucial for writing robust and maintainable Java programs.