Suljettujen tyyppien määrittely
Rajoita, mitkä tyypit voivat periä tyypin.
Suljettujen tyyppien määrittely 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.
Mitä suljetut tyypit ovat
sealed-luokka tai -rajapinta rajoittaa, mitkä muut tyypit voivat periä sen tai toteuttaa sen. Näin voidaan mallintaa suljettu joukko vaihtoehtoja, jota kääntäjä voi käsitellä kattavasti.
Ratkaistava ongelma
Tavallisen public-luokan voi aliluokittaa kuka tahansa ja missä tahansa. Joskus haluatte täsmälleen kolme muotoa tai kaksi maksutapaa ilman yllätyksiä. Sulkeminen tekee tästä tarkoituksesta selkeän ja pakottaa noudattamaan sitä.
sealed-avainsana
Merkitkää tyyppi määreellä sealed ja luetelkaa sallitut alityypit permits-lausekkeessa. Jokaisen sallitun alityypin on ilmoitettava oma perintämääreensä.
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
public static void main(String[] args) {
Shape s = new Circle(2.0);
System.out.println(s);
}
}Alityyppien määreet
Jokaisen sallitun alityypin on oltava jokin seuraavista: final (ei uusia aliluokkia), sealed (rajoitus jatkuu) tai non-sealed (periminen avataan uudelleen). Tietueet ovat implisiittisesti final.
final-aliluokka
Aliluokan merkitseminen määreellä final sulkee hierarkian kyseisestä haarasta.
public class Main {
sealed interface Animal permits Dog, Cat {}
static final class Dog implements Animal {
public String toString() { return "Dog"; }
}
static final class Cat implements Animal {
public String toString() { return "Cat"; }
}
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a);
}
}non-sealed-aliluokka
non-sealed-alityyppi avaa perimisen tarkoituksellisesti uudelleen, jolloin ennestään tuntemattomat luokat voivat taas periä sen. Käyttäkää tätä harkiten, kun yhden haaran on pysyttävä avoimena.
public class Main {
sealed interface Plugin permits CorePlugin, ExternalPlugin {}
static final class CorePlugin implements Plugin {}
static non-sealed class ExternalPlugin implements Plugin {}
static class ThirdParty extends ExternalPlugin {}
public static void main(String[] args) {
Plugin p = new ThirdParty();
System.out.println(p.getClass().getSimpleName());
}
}Myös sealed-luokat
Sulkeminen ei rajoitu rajapintoihin. Abstrakti sealed class toimii samalla tavalla, ja siihen voidaan sijoittaa jaettua tilaa ja toimintaa.
public class Main {
sealed static abstract class Expr permits Num, Add {}
static final class Num extends Expr {
final int value;
Num(int value) { this.value = value; }
}
static final class Add extends Expr {
final Expr left, right;
Add(Expr left, Expr right) { this.left = left; this.right = right; }
}
public static void main(String[] args) {
Expr e = new Add(new Num(1), new Num(2));
System.out.println(e.getClass().getSimpleName());
}
}Sama moduuli tai pakkaus
Sallittujen alityyppien on oltava samassa moduulissa kuin sealed-tyypin tai samassa pakkauksessa, jos koodi ei ole modulaarista. Näin suljettu joukko pysyy koossa ja voidaan tarkistaa.
Kääntäjän valvonta
Jos luokka yrittää periä sealed-tyypin olematta lueteltuna permits-lausekkeessa, koodi ei käänny. Suljettu joukko taataan käännösaikana.
Miksi tämä on tärkeää
Koska kääntäjä tuntee kaikki alityypit, se voi tarkistaa, että sealed-tyypin käsittelevä switch kattaa kaikki tapaukset. Tämä muodostaa perustan kattavalle hahmonsovitukselle, jota käsitellään myöhemmällä kurssilla.
Täydellinen hierarkia
Tässä on pieni suljettu hierarkia, jota käytetään arvojen mallintamiseen.
public class Main {
sealed interface Json permits JsonNull, JsonNumber, JsonString {}
record JsonNull() implements Json {}
record JsonNumber(double value) implements Json {}
record JsonString(String value) implements Json {}
public static void main(String[] args) {
Json[] values = { new JsonNull(), new JsonNumber(3.5), new JsonString("hi") };
for (Json j : values) {
System.out.println(j);
}
}
}Pikatesti
Testatkaa, miten hyvin ymmärrätte sealed-määrittelyt.
Kertaus
Opitte määrittämään sealed-tyyppejä.
sealedrajoittaa, kuka voi periä tyypin tai toteuttaa sen.permits-lauseke luettelee sallitut alityypit.- Jokaisen alityypin on oltava
final,sealedtainon-sealed. - Alityyppien on oltava samassa moduulissa tai pakkauksessa, ja kääntäjä valvoo tätä.
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 ”Suljettujen tyyppien määrittely” ilmainen?
Kyllä – oppitunnin ”Suljettujen tyyppien määrittely” 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 ”Suljettujen tyyppien määrittely”?
Rajoita, mitkä tyypit voivat periä tyypin. 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 ”Suljettujen tyyppien määrittely”-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
- Suljettujen tyyppien määrittely
- permits-lauseke
- Suljetut tyypit ja tietueet
- Kattava switch suljetulla tyypillä