0Pricing
Java Academy · Lekcja

Generyczne metody i klasy

Zdefiniują Państwo generyczne klasy z parametrami typów i napiszą generyczne metody, umieszczając <T> przed typem zwracanym. Dowiedzą się Państwo, gdzie pomaga inferencja typów.

Generyczne metody i klasy to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 3 lekcji w sumie.

Przegląd

Klasy generyczne pozwalają używać jednego projektu dla wielu typów, a metody generyczne działają z parametrami typów nawet wewnątrz klas niegenerycznych. Utworzymy niewielką klasę Pair<T,U>, metodę swap oraz statyczną metodę fabrykującą.

Po co klasy generyczne?

Dlaczego tworzymy klasę generyczną?

  • Jeden projekt, wiele typów: ogranicza powtarzanie kodu.
  • Bezpieczeństwo typów: nieprawidłowe typy są wykrywane podczas kompilacji.
  • Czyste API: brak rzutowań w wartościach zwracanych.

Kod: Pair<T,U>

Pair<T,U> pozwala używać tej samej klasy z dwoma różnymi typami. Rzutowania nie są potrzebne, a API jest przejrzyste.

public class Main {
  // Simple generic data holder with two type parameters
  static class Pair<T, U> {
    private final T first;
    private final U second;
    Pair(T first, U second) { this.first = first; this.second = second; }
    T first() { return first; }
    U second() { return second; }
    public String toString() { return "Pair(" + first + ", " + second + ")"; }
  }

  public static void main(String[] args) {
    Pair<String, Integer> p = new Pair<>("age", 21);
    System.out.println(p);
    System.out.println(p.first() + " -> " + p.second());
  }
}

Metody generyczne: sygnatura

Metody generyczne działają niezależnie od tego, czy klasa jest generyczna. Sygnatura: <T> returnType... Przykład: <T> T firstOrDefault(T[] arr, T def).

Kod: generyczna metoda swap

<T> zdefiniowano na poziomie metody, dzięki czemu działa ona z różnymi tablicami. Podczas wywołania nie podaliśmy typu, ponieważ kompilator wywnioskował go samodzielnie.

public class Main {
  // Generic utility method: swap two indices of an array of any reference type
  static <T> void swap(T[] arr, int i, int j) {
    T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
  }

  public static void main(String[] args) {
    String[] names = { "Ada", "Bob", "Cyd" };
    swap(names, 0, 2); // works with String[]
    for (int k = 0; k < names.length; k = k + 1) {
      System.out.print(names[k] + (k < names.length - 1 ? " " : "\n"));
    }
  }
}

Kod: statyczna generyczna metoda fabrykująca

Statyczna generyczna metoda fabrykująca: podczas wywołania of(T v) typ jest wywnioskowany automatycznie. Sposób użycia jest przejrzysty i czytelny.

public class Main {
  static class Box<T> {
    private final T value;
    private Box(T v) { this.value = v; }
    public T get() { return value; }
    // Static generic factory method inside a generic class
    public static <T> Box<T> of(T v) { return new Box<T>(v); }
  }

  public static void main(String[] args) {
    // Type inferred by diamond and method generic parameter
    Box<Integer> bi = Box.of(42);
    Box<String> bs = Box.of("hi");
    System.out.println(bi.get() + 1);
    System.out.println(bs.get().toUpperCase());
  }
}

Sprawdzenie metod generycznych

Szybkie sprawdzenie: Jak poprawnie zadeklarować metodę generyczną?

Podsumowanie

Podsumowanie: Klasy generyczne (Pair<T,U>) ograniczają powtarzanie kodu, a metody generyczne (sygnatura <T>) działają niezależnie od klasy. Inferencja typów upraszcza wywołania.

Często zadawane pytania

Czy lekcja „Generyczne metody i klasy” jest bezpłatna?

Tak — pełny tekst „Generyczne metody i klasy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Generyczne metody i klasy”?

Zdefiniują Państwo generyczne klasy z parametrami typów i napiszą generyczne metody, umieszczając <T> przed typem zwracanym. Dowiedzą się Państwo, gdzie pomaga inferencja typów. Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Generyczne metody i klasy”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Interfejsy w praktyce
  2. Podstawy generyków (T, inferencja)
  3. Generyczne metody i klasy
← Powrót do Java Academy