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
- Interfejsy w praktyce
- Podstawy generyków (T, inferencja)
- Generyczne metody i klasy