Java Academy · Lekcja

Dopasowanie wzorców dla instanceof

Powiązanie zmiennej podczas sprawdzania typu

Lekcja 1 z 413 kroki

Dopasowanie wzorców dla instanceof to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 z 4. 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 4 lekcji w sumie.

Dopasowywanie wzorców dla instanceof

W starszym sposobie używania instanceof najpierw sprawdzało się typ, a potem wykonywało rzutowanie. Dopasowywanie wzorców łączy sprawdzenie i rzutowanie w jednym kroku, przypisując zmienną o określonym typie, gdy sprawdzenie się powiedzie.

Dawny kod pomocniczy

Klasyczny kod sprawdza typ, a następnie rzutuje wartość do nowej zmiennej. Jest powtarzalny i łatwo popełnić w nim błąd.

public class Main {
    public static void main(String[] args) {
        Object obj = "hello";
        if (obj instanceof String) {
            String s = (String) obj;
            System.out.println(s.length());
        }
    }
}

Nowa forma

Wzorzec typu deklaruje zmienną bezpośrednio w wyrażeniu: if (obj instanceof String s). Gdy warunek jest prawdziwy, s zawiera już wartość po rzutowaniu.

public class Main {
    public static void main(String[] args) {
        Object obj = "hello";
        if (obj instanceof String s) {
            System.out.println(s.length());
        }
    }
}

Zmienna powiązana ze wzorcem

Zmienna s jest nazywana zmienną wzorca. Jest dostępna w zakresie wszędzie tam, gdzie kompilator może udowodnić, że wzorzec został dopasowany, dzięki czemu kod jest krótszy i bezpieczniejszy.

Używanie wzorca w warunkach

W ramach tego samego warunku if możesz użyć zmiennej wzorca po &&, ponieważ na tej gałęzi dopasowanie jest zagwarantowane.

public class Main {
    public static void main(String[] args) {
        Object obj = "developer";
        if (obj instanceof String s && s.length() > 5) {
            System.out.println("Long string: " + s);
        }
    }
}

Negacja i zakres przepływu

W przypadku negacji zakres zmiennej jest odpowiednio odwracany. Po if (!(obj instanceof String s)) return; zmienna s jest dostępna do końca metody, ponieważ kod wykonuje się dalej tylko wtedy, gdy dopasowanie się powiodło.

public class Main {
    static int safeLength(Object obj) {
        if (!(obj instanceof String s)) {
            return -1;
        }
        return s.length();
    }

    public static void main(String[] args) {
        System.out.println(safeLength("abc"));
        System.out.println(safeLength(42));
    }
}

Zastępowanie equals i rzutowania

Typowym zastosowaniem jest przejrzyste przesłonięcie equals: sprawdź typ i powiąż zmienną w jednym wierszu, a następnie porównaj pola.

public class Main {
    static final class Point {
        final int x, y;
        Point(int x, int y) { this.x = x; this.y = y; }
        public boolean equals(Object o) {
            return o instanceof Point p && p.x == x && p.y == y;
        }
        public int hashCode() { return x * 31 + y; }
    }

    public static void main(String[] args) {
        System.out.println(new Point(1, 2).equals(new Point(1, 2)));
        System.out.println(new Point(1, 2).equals(new Point(3, 4)));
    }
}

Obsługa mieszanych typów

Łańcuchy gałęzi else if ze wzorcami pozwalają przejrzyście obsługiwać kilka możliwych typów.

public class Main {
    static String describe(Object obj) {
        if (obj instanceof Integer i) {
            return "int " + (i * 2);
        } else if (obj instanceof String s) {
            return "string of length " + s.length();
        } else {
            return "unknown";
        }
    }

    public static void main(String[] args) {
        System.out.println(describe(21));
        System.out.println(describe("hello"));
        System.out.println(describe(3.14));
    }
}

Null nigdy nie pasuje

Wzorzec instanceof ma wartość false dla null, podobnie jak klasyczny operator. Zmienna wzorca nigdy nie zostaje więc powiązana z wartością null, co eliminuje częste źródło wyjątków NPE.

public class Main {
    public static void main(String[] args) {
        Object obj = null;
        if (obj instanceof String s) {
            System.out.println("matched: " + s);
        } else {
            System.out.println("null or not a String");
        }
    }
}

Czytelniejszy i bezpieczniejszy kod

Dopasowywanie wzorców eliminuje zbędne rzutowanie, zawęża zakres zmiennej, dzięki czemu nie można jej niewłaściwie użyć, i jest niemal tak czytelne jak język naturalny. Jest to preferowany styl we współczesnej Javie.

Połączenie elementów

Niewielki dyspozytor, który formatuje różne dane wejściowe za pomocą wzorców.

public class Main {
    static String format(Object o) {
        if (o instanceof Double d) return String.format("%.1f", d);
        if (o instanceof Integer i) return Integer.toString(i);
        if (o instanceof String s && !s.isBlank()) return s.trim();
        return "n/a";
    }

    public static void main(String[] args) {
        System.out.println(format(3.14159));
        System.out.println(format(99));
        System.out.println(format("  spaced  "));
        System.out.println(format(null));
    }
}

Szybkie sprawdzenie

Proszę sprawdzić swoje rozumienie wzorców instanceof.

Podsumowanie

Poznał(a) Pan/Pani dopasowywanie wzorców dla instanceof.

  • Łączy ono sprawdzanie typu i rzutowanie w jedno wyrażenie.
  • Zmienna wzorca jest dostępna w zakresie, w którym dopasowanie zostało potwierdzone.
  • Wzorce mają wartość false dla null, dzięki czemu unikają wyjątków NPE.
  • Upraszczają nadpisywanie equals i wybór obsługi na podstawie typu.
Bezpłatny start

Ucz się Java dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
104
Lekcje
374

Często zadawane pytania

Czy lekcja „Dopasowanie wzorców dla instanceof” jest bezpłatna?

Tak — pełny tekst „Dopasowanie wzorców dla instanceof” 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 4 lekcji w sumie.

Co nauczysz się w „Dopasowanie wzorców dla instanceof”?

Powiązanie zmiennej podczas sprawdzania typu Ć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 1 z 4.

Ile czasu zajmuje lekcja „Dopasowanie wzorców dla instanceof”?

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. Dopasowanie wzorców dla instanceof
  2. Wzorce rekordów
  3. Zagnieżdżone wzorce rekordów
  4. Wzorce w switch
← Powrót do Java Academy