Java 10 LocalVariable Type-Inference
• Java 10 új funkciók
1. Áttekintés
A JDK 10 egyik legszembetűnőbb fejlesztése a helyi változók inicializálókkal történő típus következtetése.
Ez az oktatóanyag a funkció részleteit példákkal ismerteti.
2. Bevezetés
A Java 9-ig kifejezetten meg kellett említenünk a helyi változó típusát, és gondoskodnunk kell arról, hogy kompatibilis legyen az inicializálásához használt inicializálóval:
Karakterlánc = "Viszlát, Java 9";
A Java 10-ben így tudtuk deklarálni a helyi változót:
@Test public void whenVarInitWithString_thenGetStringTypeVar () {var message = "Hello, Java 10"; assertTrue (String üzenetpéldánya); }
Nem adjuk meg a (z) adattípusát üzenet. Ehelyett jelöljük az üzenet mint a var, és a fordító megállapítja a típus típusát üzenet a jobb oldalon található inicializáló típusától.
A fenti példában a üzenet lenne Húr.
Vegye figyelembe, hogy ez a szolgáltatás csak az inicializálóval rendelkező helyi változók esetén érhető el. Nem használható tagváltozókhoz, metódusparaméterekhez, visszatérési típusokhoz stb. - az inicializálóra szükség van, mivel amely nélkül a fordító nem lesz képes következtetni a típusra.
Ez a fejlesztés segít csökkenteni a kazánlap kódját; például:
Térképtérkép = új HashMap ();
Ez most így írható át:
var idToNameMap = új HashMap ();
Ez is segít a változó nevére koncentrálni, nem pedig a változó típusára.
Egy másik dolog, amit meg kell jegyezni, az var nem kulcsszó - ez biztosítja a visszamenőleges kompatibilitást a használó programok számára var mondjuk függvényként vagy változó névként. var egy fenntartott típusú név, csakúgy, mint int.
Végül vegye figyelembe, hogy van nincs futásidejű rezsi a használatban var a Java-t sem teszi dinamikusan tipizált nyelvvé. A változó típusára a fordítás idején még mindig következtetni lehet, és később nem változtatható meg.
3. Illegális használata var
Mint korábban említettük, var inicializáló nélkül nem fog működni:
var n; // hiba: inicializáló nélkül nem használható a „var” a változón
Az sem működik, ha inicializáljuk nulla:
var emptyList = null; // hiba: a változó inicializálója „null”
Nem helyi változók esetén nem fog működni:
public var = "szia"; // error: A „var” itt nem engedélyezett
A lambda kifejezésnek kifejezett céltípusra van szüksége, ezért var nem használható:
var p = (String s) -> s.hossz ()> 10; // hiba: a lambda kifejezésnek kifejezett céltípusra van szüksége
Ugyanez a helyzet a tömb inicializálóval:
var arr = {1, 2, 3}; // hiba: a tömb inicializálójának kifejezett céltípusra van szüksége
4. Használati útmutató var
Vannak olyan helyzetek, amikor var legálisan használható, de nem biztos, hogy jó ötlet erre.
Például olyan helyzetekben, amikor a kód kevésbé olvashatóvá válhat:
var eredmény = obj.prcoess ();
Itt, bár a var, nehéz lesz megérteni a folyamat()így a kód kevésbé olvasható.
A java.thet külön cikk a Java változótípusok következtetéseinek stílusirányelveiről, amely arról beszél, hogy miként kell használnunk az ítélőképességet e funkció használata közben.
Egy másik helyzet, ahol a legjobb elkerülni var hosszú csővezetékben van:
var x = emp.getProjects.stream () .findFirst () .map (String :: length) .orElse (0);
A var váratlan eredményt is adhat.
Például, ha a Java 7-ben bevezetett gyémánt operátorral együtt használjuk:
var empList = new ArrayList ();
A típusa empListlesz Tömb listaés nem Lista. Ha azt akarjuk, hogy legyen Tömb lista, kifejezettnek kell lennünk:
var empList = new ArrayList ();
Használata var nem denotálható típusokkal váratlan hibát okozhat.
Például, ha használjuk var az anonim osztálypéldánnyal:
@Test public void whenVarInitWithAnonymous_thenGetAnonymousType () {var obj = new Object () {}; assertFalse (obj.getClass (). egyenlő (Object.class)); }
Most, ha megpróbálunk másikat kijelölni Tárgynak nek obj, fordítási hibát kapunk:
obj = új objektum (); // hiba: Az objektum nem konvertálható
Ennek oka, hogy a következtetett típus obj nem Tárgy.
5. Következtetés
Ebben a cikkben az új Java 10 helyi változó típusú következtetési funkciót láttuk példákkal.
Szokás szerint a kódrészletek megtalálhatók a GitHubon.
Következő » Java 10 teljesítményjavítások