Pattern Matching instanceof-lausekkeella
Sido muuttuja tyyppiä testatessasi.
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.
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
- Pattern Matching instanceof-lausekkeella
- Tietuekuviot
- Sisäkkäiset tietuekuviot
- Kuviot switch-lausekkeessa