java-tutorial

11) Generics (the useful parts)

Goal

Write type-safe reusable code (and read generic code without panic).

Why generics?

Without generics you lose type safety:

List items = new ArrayList();
items.add("hi");
Integer x = (Integer) items.get(0); // runtime crash

With generics:

List<String> items = new ArrayList<>();
items.add("hi");
String x = items.get(0);

Generic methods

static <T> T first(List<T> list) {
    return list.get(0);
}

Wildcards

Rule of thumb: PECS

Exercises

  1. Implement Box<T> with get() and set(T).
  2. Write a method sum(List<? extends Number> nums) returning double.

Table of contents

  1. Getting Started: Install, run, and your first program
  2. Java Basics: types, variables, operators, formatting
  3. Control Flow: if/switch/loops
  4. Methods: parameters, return values, overloading
  5. OOP: classes, objects, encapsulation
  6. Inheritance & Polymorphism (and when not to use them)
  7. Interfaces, abstract classes, and design basics
  8. Exceptions and error handling
  9. Strings, files, and I/O basics
  10. Collections: List/Set/Map and Big-O intuition
  11. Generics (the useful parts)
  12. Lambdas & Streams
  13. Dates and time (java.time)
  14. Testing with JUnit 5 (basics)
  15. Concurrency: threads, executors, futures
  16. JVM basics: memory, GC, performance habits
  17. Build tools: Maven essentials (recommended)
  18. Next steps: projects to build