Java 10 LocalVariable Type-Inference

Ez a cikk egy sorozat része: • Java 10 LocalVariable Type-Inference (aktuális cikk) • Java 10 Performance Improvements

• 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

$config[zx-auto] not found$config[zx-overlay] not found