Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 9 - Features abseits von Jigsaw und JShell

Java 9 - Features abseits von Jigsaw und JShell

Spricht man mit Entwicklern über Java 9, so fällt den meisten zuerst Jigsaw und nach einigem Überlegen noch JShell als neue Features ein. Neben diesen beiden, im Rampenlicht stehenden Features bietet Java 9 jedoch noch eine Menge an weiteren, häufig deutlich kleineren Neuerungen. Einige dieser “Hidden”-Features lernen Sie in dieser Session kennen. Und wer weiß, vielleicht ist auch eines dabei, dass Sie viel besser verwenden können als die beiden großen, denn häufig liegen die Unterschiede ja im Detail.

Michael Vitz

March 14, 2018
Tweet

More Decks by Michael Vitz

Other Decks in Programming

Transcript

  1. Java 9 Features abseits von Jigsaw und JShell Michael Vitz

    @michaelvitz Brühl, 14.03.2018
 JavaLand 2018 Foto © “Coffee Break Break Alarm Clock Time” by Alexandra
  2. 2 Java 9 - Features abseits von Jigsaw und JShell

    „bash ist die einzige Sprache die ich konstant in allen Projekten einsetze.“ Michael Vitz
 Senior Consultant bei INNOQ • Entwicklung, Wartung und Betrieb von JVM Anwendungen • JavaSPEKTRUM Kolumnist • ❤ Clojure
  3. 4 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: http://openjdk.java.net/projects/jdk9/
  4. 5 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: http://www.oracle.com/technetwork/java/eol-135779.html
  5. 6 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: http://openjdk.java.net/projects/jdk/10/
  6. 8 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: http://openjdk.java.net/projects/jdk9/
  7. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 102 Process API Updates Foto © INNOQ
  8. 11 Java 9 - Features abseits von Jigsaw und JShell

    ProcessHandle .allProcesses() .map(ProcessHandle::pid) .forEach(System.out::println);
  9. 12 Java 9 - Features abseits von Jigsaw und JShell

    ProcessHandle .allProcesses() .filter(p -> !p.parent().isPresent()) .map(p -> p.info()) .forEach(System.out::println);
  10. 13 Java 9 - Features abseits von Jigsaw und JShell

    ProcessHandle.current().destroy();
  11. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 213 Milling Project Coin Foto © “Hand Man Bitcoin Dollar” by gerald
  12. 15 Java 9 - Features abseits von Jigsaw und JShell

    @SafeVarargs private void print(List<String>... stringLists) { ... }
  13. public static void execute(Connection con) throws SQLException { try (con)

    { // ... } } 16 Java 9 - Features abseits von Jigsaw und JShell
  14. private static Comparator<MyClass> C = new Comparator<>() { @Override public

    int compare( MyClass o1, MyClass o2) { return 0; } }; 17 Java 9 - Features abseits von Jigsaw und JShell
  15. public interface Lambda { public int a(int _); public default

    void t(Lambda l) { t(_ -> 0); } } 18 Java 9 - Features abseits von Jigsaw und JShell
  16. public interface Foo { private String bar() { return "FooBar";

    } } 19 Java 9 - Features abseits von Jigsaw und JShell
  17. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 223 New Version-String Scheme Foto © INNOQ
  18. 21 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: http://openjdk.java.net/jeps/322
  19. final Runtime.Version version = Runtime.version(); System.out.println(version.toString()); System.out.println(version.major()); System.out.println(version.minor()); System.out.println(version.security()); final

    Runtime.Version newVersion = Runtime.Version.parse("9.1"); System.out.println(newVersion.compareTo(version)); 22 Java 9 - Features abseits von Jigsaw und JShell
  20. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 225 Javadoc Search Foto © INNOQ
  21. 25 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: https://docs.oracle.com/javase/9/docs/api
  22. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 238 Multi-Release JAR Files Foto © INNOQ
  23. 27 Java 9 - Features abseits von Jigsaw und JShell

    $ unzip -l multi.jar Archive: multi.jar Length Date Time Name --------- ---------- ----- ---- 0 11-28-2017 10:20 META-INF/ 114 11-28-2017 10:20 META-INF/MANIFEST.MF 0 11-28-2017 09:09 META-INF/versions/ 0 11-28-2017 10:19 META-INF/versions/9/ 0 11-28-2017 10:19 META-INF/versions/9/eu/ 0 11-28-2017 10:19 META-INF/versions/9/eu/javaland/ 853 11-28-2017 10:19 META-INF/versions/9/eu/javaland/Greeter.class 0 11-28-2017 10:18 eu/ 0 11-28-2017 10:18 eu/javaland/ 574 11-28-2017 10:18 eu/javaland/Greeter.class 362 11-28-2017 10:18 eu/javaland/Main.class --------- ------- 1903 11 files
  24. 28 Java 9 - Features abseits von Jigsaw und JShell

    Main-Class: eu.javaland.Main Multi-Release: true
  25. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 247 Compile for Older Platform Versions Foto © INNOQ
  26. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 259 Stack-Walking API Foto © INNOQ
  27. 32 Java 9 - Features abseits von Jigsaw und JShell

    StackWalker.getInstance() .forEach(f -> System.out.println( f.getClassName() + "#" + f.getMethodName() + "@" + f.getLineNumber()));
  28. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 266 More Concurrency Updates Foto © INNOQ
  29. package java.util.concurrent; public final class Flow { // ... @FunctionalInterface

    public static interface Publisher<T> { public void subscribe(Subscriber<? super T> subscriber); } public static interface Subscriber<T> { public void onSubscribe(Subscription subscription); public void onNext(T item); public void onError(Throwable throwable); public void onComplete(); } public static interface Subscription { public void request(long n); public void cancel(); } public static interface Processor<T,R> extends Subscriber<T>, Publisher<R> { } // ... } 34 Java 9 - Features abseits von Jigsaw und JShell
  30. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 269 Convenience Factory Methods for Collections Foto © INNOQ
  31. 36 Java 9 - Features abseits von Jigsaw und JShell

    List.of(1, 2, 3); Set.of(1, 2, 1); Map.of("foo", "bar"); Map.ofEntries(Map.entry("foo", "bar"));
  32. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / JEP 277 Enhanced Deprecation Foto © INNOQ
  33. 38 Java 9 - Features abseits von Jigsaw und JShell

    package java.lang; public class Thread implements Runnable { // ... @Deprecated(since="1.5", forRemoval=true) public void destroy() { throw new NoSuchMethodError(); } // ... }
  34. 39 Java 9 - Features abseits von Jigsaw und JShell

    java.util.logging.LogManager.addPropertyChangeListener java.util.logging.LogManager.removePropertyChangeListener java.util.jar.Pack200.Packer.addPropertyChangeListener java.util.jar.Pack200.Packer.removePropertyChangeListener java.util.jar.Pack200.Unpacker.addPropertyChangeListener java.util.jar.Pack200.Unpacker.removePropertyChangeListener
  35. 40 Java 9 - Features abseits von Jigsaw und JShell

    Quelle: http://openjdk.java.net/jeps/320
  36. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / API Erweiterungen Foto © INNOQ
  37. Stream.of("<html>", "<head>", "<title>Foo</title>", "</head>", "<body>", "<h1>Foo</h1>", "<p>Some text</p>", "</body>", "</html>")

    .dropWhile(s -> !"<body>".equals(s)) .skip(1) .takeWhile(s -> !"</body>".equals(s)) .forEach(System.out::println); 42 Java 9 - Features abseits von Jigsaw und JShell
  38. Enumeration<Object> properties = System.getProperties().elements(); Stream.iterate(properties.nextElement(), p -> properties.hasMoreElements(), p ->

    properties.nextElement()) .forEach(System.out::println); 43 Java 9 - Features abseits von Jigsaw und JShell
  39. final Stream<Order> orders = findCustomerById(42) .stream() .flatMap(c -> c.getOrders().stream()); final

    Stream<String> orders = Stream.ofNullable(findCustomerById(42)) .flatMap(c -> c.getOrders().stream()); 44 Java 9 - Features abseits von Jigsaw und JShell
  40. LocalDate javaland = LocalDate.of(2018, 3, 14); LocalDate java10 = LocalDate.of(2018,

    3, 20); javaland .datesUntil(java10) .forEach(System.out::println); 49 Java 9 - Features abseits von Jigsaw und JShell
  41. Java 9 - Features abseits von Jigsaw und JShell INNOQ

    / Weitere Interessante JEPs Foto © INNOQ
  42. 52 Java 9 - Features abseits von Jigsaw und JShell

    • JEP 11: Incubator Modules • JEP 110: HTTP/2 Client (Incubator) • JEP 226: UTF-8 Property Resource Bundles • JEP 248: Make G1 the Default Garbage Collector
  43. 53 • Deckblatt: “Coffee Break Break Alarm Clock Time” by

    Alexandra, https://pixabay.com/en/coffee-break-break-alarm-clock-time-1291381/ • Seite 14: “Hand Man Bitcoin Dollar” by gerald, https://pixabay.com/en/hand-man-bitcoin-dollar-3051988/ Java 9 - Features abseits von Jigsaw und JShell Bilder
  44. Java 9 Features abseits von Jigsaw und JShell Michael Vitz

    @michaelvitz Brühl, 14.03.2018
 JavaLand 2018 Foto © “Coffee Break Break Alarm Clock Time” by Alexandra