Det er uten tvil spennende tider i vente for alle oss med hjerte for Java, enten det er språket vi kjemper med til daglig eller det vekker nostalgi fra universitetstiden. JavaZone er rett rundt hjørnet, og om ikke det skulle være grunn nok til begeistring blir vi servert en rykende fersk Javaversjon allerede uken etter. For etter gjentatte utsettelser og dramatiske vendinger senest i vår, kan vi i skrivende øyeblikk klamre oss til 21. september som endelig releasedato.

I dette blogginnlegget vil du få et innblikk i noe av det som kommer i Java 9, og vi skal se nærmere på et knippe av de mest spennende nyvinningene sett fra en Javautviklers ståsted.

 

 

Hverdagsnytte

For å starte i det nøkterne hjørnet; ja, det revolusjonerende er spennende, men de fleste av oss vet nok også å sette pris på litt hverdagsnytte. Med Java 9 får vi en hel del hverdagsnytte, og foruten søkemuligheter i Javadocen, utvidet deprecation og muligheten til å skrive private metoder i interface, blir det nå mye enklere å lage små immutable collections. Helt konkret får vi en metode of() som lar oss opprette en immutable List, Set eller Map uten å måtte gjøre krumspring og husketeknikker via eksterne biblioteker og mutable collections.

// List.of() og Map.of()
List<String> immutableList = List.of("Melk", "Brød");
Map<Integer, String> immutableMap = Map.of(1, "Karl", 2, "Ove");

Akkurat som immutable collections og private metoder i et interface er en naturlig forlengelse av Java 8s funksjonelle lambdas og interface defaultmetoder, får vi også noen etterlengtede forbedringer av Stream og Optional. Stream-interfacet får noen nye metoder, der takeWhile() og dropWhile() lar oss filtrere elementer fra en sortert stream uten å måtte undersøke hvert element i den potensielt uendelige streamen.

// Stream.takeWhile()
List.of(15, 16, 23, 29, 28).stream()
        .takeWhile(alder -> alder < 18) // sjekker bare de to første elementene, men krever sortering
        .forEach(System.out::println);

Optionals inntog i Java 8 gjorde det litt greiere å hanskes med null-verdier, og til tross for at Optionals i Java på langt nær redder oss fra nullpointere, får vi i Java 9 litt mer fleksibilitet i bruken av de, der ifPresentOrElse() seiler opp som den mest etterlengtede metoden. Her får vi altså muligheten til å gjøre en nullsjekk, og samtidig håndtere både if-en og else-en, alt i ett og samme uttrykk.

// Optional.ifPresentOrElse()
Optional.ofNullable("Java 9")
        .ifPresentOrElse(System.out::println, () -> System.out.println("Tom optional..."));

Modulene kommer

Det ville være utenkelig å skrive et innlegg om Java 9 uten å si noe om den absolutt største nyheten den nye versjonen gir oss, og det har jeg heller ingen planer om. Med modulsystemet legger Oracle til rette for at vi kan bryte ut fra de evinnelige avhengig-av-alt-monolittene, og heller strukturere koden vår i avgrensede sammenhengende enheter med tydelig definerte avhengigheter, eller det vi kan kalle moduler. Modulsystemet gir oss altså muligheten til å samle relaterte pakker i en modul, og i en modulbeskrivelsesfil eksplisitt definere hvilke moduler vi er avhengige av, hvilke pakker vi åpner opp for andre moduler, hvilke interface vi tilbyr, og også hvilke pakker vi åpner for reflection.

// Modulbeskrivelse i module-info.java
module client {                                    // modulnavn
    requires model;                                // moduler vi er avhengig av
    exports client.gui;                            // pakker vi åpner for at andre moduler kan ta i bruk
    provides MyInterface with MyInterfaceImpl;     // interface vi tilbyr andre moduler
    opens client.help;                             // pakker vi åpner for reflection
}

Om modulsystemet skulle virker som en i overkant stor overgang, kan jeg berolige med at Java og IntelliJ gir god støtte til automatisk modularisering, autocomplete og hjelp til å finne avhengigheter med jdeps. Faktisk ga et forsøk på å migrere en kodebase på flere hundre tusen linjer ikke annet enn et par kompileringsfeil grunnet avhengigheter til interne Java-APIer.

Java rett i konsollen

For de som måtte mene at Java er noe tungrodd med sitt klasseoppsett og sin public static void main, kommer det i Java 9 en nyvinning som vil bøte på dette, og forhåpentligvis glede alle med et ønske om å kunne teste ut kodesnutter raskt og enkelt. JShell gjør det nemlig mulig å teste Javakode rett i konsollen – en mulighet mange språk har hatt i lang tid, men som nå vil forenkle både utforsking og læring av Java som språk. JShells API åpner forøvrig for integrering i IDE, noe som vil være et kjærkoment alternativ for å teste ut kode on the fly.

Veien videre

Om noen av temaene i dette innlegget pirret interessen kan jeg anbefale boken Java 9 Revealed: For Early Adoption and Migration, skrevet av Kishori Sharan, som er en fin gjennomgang av nyheter i Java 9, og da med spesielt fokus på modulsystemet.

Som ventet blir Java 9 og modulsystemet et viktig tema for årets JavaZone, og selv har jeg ihvertfall lyst til å få med meg live-migrering til modulsystemet, endringer og utfordringer med Java 9-moduler, gjennomgamg av Java 9s gjemte skatter, samt litt om JShell. Så da håper jeg nysgjerrigheten er pirret, at det er flere enn meg som gleder seg til Java 9, og ikke minst at vi i mellomtiden ses på JavaZone.

 

 

 

Om Øystein Molnes

I tillegg til å være leder for fagnettverket Java, er Øystein en utvikler som trives i alle prosjektarbeidets faser, fra idé til kode og løsning. Som filosofi har han stor tro på evig læring, og ikler seg gjerne nye roller på veien mot å forstå og løse utfordringer for teamet, kunden, og ikke minst brukeren.

Tagget med

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *