permits-lauseke
Luettele sallitut alityypit.
permits-lauseke on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
permits-lauseke
permits-lausekkeella sealed-tyyppi nimeää sallitut alityyppinsä. Se tulee heti tyypin nimen ja permits-avainsanan yhteyteen.
Perussyntaksi
Luetelkaa sallitut alityypit pilkuilla eroteltuina permits-avainsanan jälkeen.
public class Main {
sealed interface Vehicle permits Car, Truck, Motorcycle {}
record Car() implements Vehicle {}
record Truck() implements Vehicle {}
record Motorcycle() implements Vehicle {}
public static void main(String[] args) {
Vehicle v = new Truck();
System.out.println(v.getClass().getSimpleName());
}
}Sopimuksen toteuttaminen
Jokaisen nimetyn alityypin on todella käytettävä sealed-tyypin kanssa joko implements-määrettä (rajapinnoille) tai extends-määrettä (luokille). Sellaisen luokan nimeäminen permits-lausekkeessa, joka ei tee tätä, aiheuttaa käännösvirheen.
permits-lausekkeen pois jättäminen
Jos kaikki sallitut alityypit määritellään samassa tiedostossa kuin sealed-tyyppi, permits-lausekkeen voi jättää kokonaan pois. Kääntäjä päättelee luettelon automaattisesti.
public class Main {
sealed interface Status {}
record Active() implements Status {}
record Inactive() implements Status {}
public static void main(String[] args) {
Status s = new Active();
System.out.println(s.getClass().getSimpleName());
}
}Milloin permits vaaditaan
Jos alityypit sijaitsevat erillisissä tiedostoissa samassa pakkauksessa tai moduulissa, ne on lueteltava erikseen permits-lausekkeessa. Kääntäjä ei voi päätellä luetteloa tiedostojen välillä.
Järjestyksellä ei ole merkitystä
Nimien järjestyksellä permits-lausekkeessa ei ole semanttista merkitystä. Se ei vaikuta switch-toimintaan eikä mihinkään muuhunkaan, vaan on ainoastaan sallittujen tyyppien luettelo.
Luokkahierarkia permits-lausekkeella
Sama lauseke toimii myös sealed-luokissa, joissa on abstraktia toimintaa.
public class Main {
sealed static abstract class Node permits Leaf, Branch {
abstract int size();
}
static final class Leaf extends Node {
int size() { return 1; }
}
static final class Branch extends Node {
final Node a, b;
Branch(Node a, Node b) { this.a = a; this.b = b; }
int size() { return a.size() + b.size(); }
}
public static void main(String[] args) {
Node tree = new Branch(new Leaf(), new Branch(new Leaf(), new Leaf()));
System.out.println("Leaves: " + tree.size());
}
}Alityypin unohtaminen
Jos luokka toteuttaa sealed-rajapinnan mutta puuttuu permits-lausekkeesta, kääntäminen epäonnistuu ja ilmoittaa, ettei luokalla ole oikeutta periä sealed-tyyppiä.
Sallitut tyypit ovat julkista tietoa
permits-luettelo on osa tyypin sopimusta, ja se tallennetaan luokkatiedostoon. Työkalut ja kääntäjä voivat lukea sen ja selvittää alityyppien täydellisen joukon.
final- ja sealed-aliluokkien yhdistäminen
permits-luettelossa voidaan yhdistää eri määreitä: jotkin aliluokat voivat olla final ja toiset sealed, jolloin hierarkia jatkuu syvemmälle.
public class Main {
sealed interface Shape permits Circle, Polygon {}
record Circle(double r) implements Shape {}
sealed interface Polygon extends Shape permits Triangle, Rectangle {}
record Triangle() implements Polygon {}
record Rectangle() implements Polygon {}
public static void main(String[] args) {
Shape s = new Triangle();
System.out.println(s instanceof Polygon);
}
}Hyvät käytännöt
Pitäkää sealed-tyyppi ja sen alityypit lähellä toisiaan, jotta koodi on helppo lukea. Pienissä yhden tiedoston hierarkioissa kannattaa jättää permits-lauseke pois ja tiedostojen ollessa erillään luetella alityypit näkyvästi.
Pikatesti
Testatkaa, miten hyvin ymmärrätte permits-lausekkeen.
Kertaus
Opitte käyttämään permits-lauseketta.
- Se luettelee sallitut alityypit sealed-tyypin nimen jälkeen.
- Jokaisen luetellun tyypin on perittävä sealed-tyyppi tai toteutettava se.
- Sen voi jättää pois, kun kaikki alityypit ovat samassa tiedostossa.
- Alityypit voivat itse olla sealed-tyyppejä, jolloin hierarkia voi jatkua.
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 ”permits-lauseke” ilmainen?
Kyllä – oppitunnin ”permits-lauseke” 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 ”permits-lauseke”?
Luettele sallitut alityypit. 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 2/4.
Kuinka kauan ”permits-lauseke”-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ä