Java Academy · Oppitunti

Pattern Matching instanceof-lausekkeella

Sido muuttuja tyyppiä testatessasi.

Oppitunti 1/413 vaihetta

Pattern Matching instanceof-lausekkeella on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

instanceof-hahmonsovitus

Aiemmin instanceof-operaattoria käytettiin tarkistamalla tyyppi ja tekemällä sitten tyyppimuunnos. Hahmonsovitus yhdistää tarkistuksen ja tyyppimuunnoksen yhdeksi vaiheeksi ja sitoo tyypitetyn muuttujan, kun tarkistus onnistuu.

Vanha toistuva koodi

Perinteisessä koodissa tyyppi tarkistetaan ja arvo muunnetaan sitten uuteen muuttujaan. Tämä toistuu helposti ja siinä on helppo tehdä virheitä.

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());
        }
    }
}

Uusi muoto

Tyyppihahmo määrittää muuttujan suoraan lausekkeessa: if (obj instanceof String s). Kun ehto on tosi, s sisältää jo tyyppimuunnetun arvon.

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

Sidottu muuttuja

Muuttujaa s kutsutaan hahmomuuttujaksi. Se on näkyvyysalueella aina, kun kääntäjä voi todistaa hahmon sopineen, mikä tekee koodista sekä lyhyempää että turvallisempaa.

Käyttäminen ehdoissa

Voitte käyttää hahmomuuttujaa samassa if-ehdossa &&-operaattorin jälkeen, koska osuma on kyseisessä haarassa varma.

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);
        }
    }
}

Negaatio ja kontrollivuon mukainen näkyvyysalue

Negaatiossa näkyvyysalue vaihtuu älykkäästi. Lausekkeen if (!(obj instanceof String s)) return; jälkeen muuttuja s on näkyvissä metodin loppuosassa, koska suoritus jatkuu vain silloin, kun osuma toteutui.

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));
    }
}

equals- ja tyyppimuunnoksen korvaaminen

Oppikirjaesimerkki on selkeä equals-metodin ylikirjoitus: tarkistakaa tyyppi ja sitokaa muuttuja yhdellä rivillä, minkä jälkeen voitte verrata kenttiä.

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)));
    }
}

Eri tyyppien käsittely

Ketjutettujen kuvioita käyttävien else if-haarojen avulla useiden mahdollisten tyyppien käsittely voidaan ohjata selkeästi.

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 ei koskaan täsmää

instanceof-kuvio tuottaa arvon false arvolla null, aivan kuten perinteinen operaattori. Siksi kuviomuuttujaan ei koskaan sidota null-arvoa, mikä poistaa yleisen NPE-ongelmien lähteen.

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");
        }
    }
}

Selkeämpää ja turvallisempaa koodia

Hahmonsovitus poistaa tarpeettoman tyyppimuunnoksen, rajaa muuttujan näkyvyysalueen niin, ettei sitä voi käyttää väärin, ja näyttää lähes englanninkieliseltä tekstiltä. Se on suositeltu tyyli nykyaikaisessa Javassa.

Kootaan kokonaisuus

Pieni ohjain, joka muotoilee erilaiset syötteet kuvioiden avulla.

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));
    }
}

Pikatarkistus

Testaa, miten hyvin ymmärrät instanceof-kuviot.

Kertaus

Opit instanceof-hahmonsovituksen.

  • Se yhdistää tyyppitarkistuksen ja tyyppimuunnoksen yhdeksi lausekkeeksi.
  • Kuviomuuttujan näkyvyysalue ulottuu kohtaan, jossa täsmäytyminen on todistettu.
  • Kuviot tuottavat arvon false arvolla null, mikä estää NPE-ongelmia.
  • Se yksinkertaistaa equals-metodin ylikirjoituksia ja tyyppien perusteella tehtävää ohjausta.
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Pattern Matching instanceof-lausekkeella” ilmainen?

Kyllä – oppitunnin ”Pattern Matching instanceof-lausekkeella” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Pattern Matching instanceof-lausekkeella”?

Sido muuttuja tyyppiä testatessasi. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Pattern Matching instanceof-lausekkeella”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pattern Matching instanceof-lausekkeella
  2. Tietuekuviot
  3. Sisäkkäiset tietuekuviot
  4. Kuviot switch-lausekkeessa
← Takaisin: Java Academy