Start here. This is the direct spoken answer to practice first.
Overview
A complete answer should explain the contract generics express, not only say they avoid casting.
Generics let a class, interface, or method work with types supplied by its caller while preserving compile-time type safety. A List<String> states that callers add and retrieve strings, so the compiler can reject incompatible values and return a String without a manual cast. A generic method such as <T> T first(List<T> values) keeps the input and output types related. This supports reuse without reducing everything to Object at the API boundary.