Java verziók újdonságai (4-23)

Tartalomjegyzék
A Java verziókról szóló cikk célja
Többen kértétek, hogy legyen egy cikk, ahol egy szövegben összefoglalva láthatjátok a különböző Java verziók újdonságait, ezért egy olyan cikkel készültünk, ami röviden összefoglalja az egyes verziók legfontosabb frissítéseit / új funkcióit.
A preview feature-ökről
A cikkben sokszor fogod látni, hogy bizonyos funkciók csak preview / incubation feature-ként, azaz valamilyen előzetes státuszban kerültek be a nyelvbe, és még nem döntöttek véglegesen arról, hogy az adott funkció a Java része legyen-e.
Éppen ezért van az, hogy ezek a funkciók alapvetően nem elérhetőek az adott Java verzióban, ezt külön be kell állítanod.
Hogy tudod engedélyezni őket?
Parancssorból
A javac parancs, mely a byte kódra fordításért felel, két argumentummal kell kiegészüljön:
javac --release 21 --enable-preview MyClassName.java
A java parancs egy paramétert kell tartalmazzon:
java --enable-preview MyClassName.java
Nem érted a fenti szöveget?
Azért vagyunk, hogy segítsünk.
IntelliJ-ből
Mi sem egyszerűbb! A felső menün kattints rá a Project Structure-re (vagy nyomd meg a Ctrl+Alt+Shift+S billentyűparancsot) és a Language level lenyitásával fogod tudni átállítani a nyelvet a preview feature-öket támogató verzióra.

Maven-nel
A pom.xml-edbe írd be a compilerArgs tag-be az –enable-preview flag-et a következő módon:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>21</source>
<target>21</target>
<compilerArgs>
--enable-preview
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
Prémium oktatást szeretnél?
Azért vagyunk, hogy segítsünk.
Értelemszerűen a source és a target verziód legyen az a verzió, amelyben a projektedet szeretnéd írni, illetve amelyikbe fordítani szeretnéd a projektedet.
Gradle-lel
Fontos, hogy itt Groovy-t és Kotlin-t is használhatsz. Ha Kotlin-nal szeretnéd megoldani, akkor nagyjából így nézne ki:
plugins {
java
application
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.3")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.3")
}
application {
mainClass.set("app.Main")
}
tasks {
val ENABLE_PREVIEW = "--enable-preview"
withType<JavaCompile>() {
options.compilerArgs.add(ENABLE_PREVIEW)
options.compilerArgs.add("-Xlint:preview")
options.release.set(22)
}
withType<Test>() {
useJUnitPlatform()
jvmArgs.add(ENABLE_PREVIEW)
}
withType<JavaExec>() {
jvmArgs.add(ENABLE_PREVIEW)
}
}
Gyorstalpalók helyett mély tudást szeretnél?
Azért vagyunk, hogy segítsünk.
Miért fontos, hogy melyik verzióban mit vezettek be?
Hogy a legpraktikusabb és legkézenfekvőbb válasszal kezdjek, állásinterjúkon néha meg szokták kérdezni, hogy melyik verziónak milyen újdonságai vannak. A szakmai interjúztatók szeretnének olyan emberekkel dolgozni, akik követik egy nyelv újdonságait, mert érdeklődést és folyamatos tanulást sugároz.
A gyakorlati jelentősége ennek az, hogy ha egy adott munkahelyen Java 17-ben van egy projekt, akkor érdemes tudnod, hogy mik azok a nyelvi eszközök és könyvtárak, amelyek rendelkezésre állnak. Gyakorlati szempontból az LTS verzióknak hatalmas a jelentősége, mert éles projektekben szinte csak ezeket használják. Ennek az okairól itt írtam részletesebben, de a rövid magyarázat az, hogy az LTS jelentése long-term support, és az Oracle garanciát vállal, hogy még tartós ideig biztonsági és mindenféle egyéb szükséges frissítéseket fog kiadni az adott verzióhoz, ez pedig roppant fontos. Tanfolyamainkon is nagy jelentőséget fektetünk arra, hogy bemutassuk a legújabb verziók újdonságait.
Cikkeinkben önkényesen szemezgetünk az újdonságokból, de odafigyelünk arra, hogy a legfontosabbnak vélt dolgok mindig szerepeljenek.
Kis csoportban tanulnál?
Azért vagyunk, hogy segítsünk.
A Java 4 újdonságai
- Regex support
- assert kulcsszó
A Java 5 újdonságai
- Generikusok
- Varargs
- Enhanced for loops
- Enumerations
- Static import statements
A Java 6 újdonságai
- Lehetőség egyedi annotációk létrehozására
- Java Compiler API
A Java 7 újdonságai
- try-with resources
A Java 8 újdonságai (LTS)
- Date time API
- Lambdas, streams
- Optional
A Java 9 újdonságai
- Modulok
- Új HTTP kliens (incubator)
A Java 10 újdonságai
- Optional.orElseThrow()
- Statikus copyOf() metódusok a List-nél, Set-nél és Map-nél
A Java 11 újdonságai (LTS)
- Új HTTP kliens (finalized)
- Utility metódusok a String class-ban (pl repeat)
- ZGC
A Java 12 újdonságai
- Switch expressions (preview)
- Új String metódusok (indent, transform)
A Java 13 újdonságai
- A ZGC fejlesztése: uncommit unused memory
- Text blocks (preview)
- yield kulcsszó megjelenése a switch expression-öknél (preview)
A Java 14 újdonságai
- Switch expressions
- Pattern matching for instanceof (preview)
- Rekordok (preview)
- Text blocks (preview)
A Java 15 újdonságai
- Sealed classes (preview)
- Rekordok (preview, a cikkben nem szerepeltettem)
- Text blocks (finalized)
- Hidden classes (preview)
- Foreign-Memory Access API (incubator)
- Shenandoah GC
A Java 16 újdonságai
- Rekordok – végleges verzió (a cikkben kitárgyaljuk a Lombokkal való összehasonlítás problémáit)
- Vector API (incubator)
- Pattern matching
A Java 17 újdonságai (LTS)
- Pattern matching for switch (preview)
- Sealed classes (finalized)
- Továbbfejlesztett pszeudo-random generátorok
A Java 18 újdonságai
- UTF-8 alapértelmezett karakterkészletként történő használata
- Simple web server
- Code snippet-ek a Javadoc-ban
- Pattern matching for switch (preview)
A Java 19 újdonságai
- Virtual threads (preview)
- Structured concurrency (preview)
- Record patterns (preview)
A Java 21 újdonságai (LTS)
- Record patterns (finalized)
- Pattern matching for switch (finalized)
- String patterns (preview)
- Sequenced collections
A Java 22 újdonságai
- Unnamed variables and patterns
- Statements before super(…) (preview)
- Foreign Function and Memory API (FFM API)
A Java 23 újdonságai
- ZGC: alapértelmezett Generational Mode
- Markdown kommentek
- import modul
A legfrissebb technológiákkal tanulnál?
Azért vagyunk, hogy segítsünk.
Köszönöm, hogy velünk tartottál! Ha érdekesnek találod a cikkünket, mindenképp javaslom, hogy nézd meg az egyes verziók újításait részletesen bemutató, sokkal részletesebb cikksorozatunkat!
Ha érdekel a Java, de nem tudod, hogy kezdd el tanulni, ajánlom neked ingyenes, 200 részes YouTube-sorozatunkat, ahol a Java legfontosabb alapvetéseitől elindulva beszélgetünk algoritmusokról és algoritmuselméletről, kisebb programokat majd később konzolos, illetve grafikus játékokat írunk, OOP-ről és szálkezelésről tanulunk. A sorozatot a holnapunkba beágyazva is elkezdheted nézni, ha úgy kényelmesebbnek találod:
Szerző: Nagy Csongor