określać typ elementów kolekcji i wykrywać część błędów typów podczas kompilacji zamiast podczas wykonywania programu.
Implementacja generyków w Javie wykorzystuje mechanizm wymazywania typów (type erasure). Większość informacji dotyczących argumentów typów generycznych nie jest zatem reprezentowana w kodzie wykonywalnym w taki sam sposób jak zwykłe typy klas.
Elementy programowania funkcyjnego
Podstawowym modelem Javy pozostaje programowanie obiektowe, jednak od Java 8 język zawiera mechanizmy pozwalające stosować elementy programowania funkcyjnego. Wprowadzono wówczas wyrażenia lambda, referencje do metod oraz interfejsy funkcyjne.
Biblioteka standardowa udostępnia m.in. API strumieni (Stream API), pozwalające wykonywać operacje takie jak filtrowanie, przekształcanie i agregowanie sekwencji danych przy użyciu stylu deklaratywnego.
Dopasowywanie wzorców i rozwój składni
W nowszych wersjach języka rozwijany jest mechanizm dopasowywania wzorców (pattern matching). Java 16 wprowadziła jego wykorzystanie z operatorem instanceof, natomiast Java 21 wprowadziła wzorce rekordów oraz dopasowywanie wzorców w konstrukcji switch.