0
7, 8 & 9 Moving the language forwardby Mario FuscoRed Hat – Senior Software Engineermario.fusco@gmail.comtwitter: @mariofu...
New in Java 7 – Released in July 2011• JSR 292: Support for dynamically-typed  languages (InvokeDynamic)• JSR 334: Small l...
Switch on Stringsswitch(dayOfWeek) {    case "Monday" :        System.out.println("Start of week");        break;    .... ...
Improved Exception handlingpublic void printFileContent(String fileName)                                 throws IOExceptio...
Try with resourcestry ( FileOutputStream fos = new FileOutputStream(file);      InputStream is = url.openStream() ){    by...
Diamond OperatorMap<Person, List<Address>>  Underscores in numeric literalsstatic final int ONE_MILLION = 1_000_000
Fork/Join Frameworkpublic class FileSizeFinder extends RecursiveTask<Long> {    private final File file;    public FileSiz...
Coming in Java 8 – Early (hopefully) 2013• JSR 335: Project Lambda• JSR TBD: Language support for collections• JSR 308: An...
Project Lambda - Backgroundpublic interface Comparator<T> {              Functional    int compare(T o1, T o2);}          ...
Lambda ExpressionsCollections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2));                     Target typingComp...
Lambda support for collectionsdouble maxScore = 0;for (Student s : students) {    if (s.gradYear == 2011) {        maxScor...
Default methodsinterface Iterator<E> {    boolean hasNext();    E next();    void remove();    void skip(int i) default { ...
What to expect from Java 9
Upcoming SlideShare
Loading in...5
×

Java 7, 8 & 9 - Moving the language forward

2,940

Published on

Published in: Technology, News & Politics
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,940
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
62
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Transcript of "Java 7, 8 & 9 - Moving the language forward"

  1. 1. 7, 8 & 9 Moving the language forwardby Mario FuscoRed Hat – Senior Software Engineermario.fusco@gmail.comtwitter: @mariofusco
  2. 2. New in Java 7 – Released in July 2011• JSR 292: Support for dynamically-typed languages (InvokeDynamic)• JSR 334: Small language enhancements (Project Coin)• JSR 166y: Concurrency and collection updates (Fork/Join framework)• JSR 203: More new I/O APIs for the Java platform (NIO.2)
  3. 3. Switch on Stringsswitch(dayOfWeek) { case "Monday" : System.out.println("Start of week"); break; .... case "Sunday" : System.out.println("Hurrey.. its weekend"); break;}
  4. 4. Improved Exception handlingpublic void printFileContent(String fileName) throws IOException { Configuration cfg = null; try { String fileText = getFile(fileName); //...code to print content } catch (FileNotFoundException | FileLockInterruptionException e1) { System.err.println("error while opening file"); throw e1; } catch (ParseException e2) { System.err.println("Error processing file"); }}
  5. 5. Try with resourcestry ( FileOutputStream fos = new FileOutputStream(file); InputStream is = url.openStream() ){ byte[] buf = new byte[4096]; int len; while ((len = is.read(buf)) > 0) { fos.write(buf, 0, len); }}
  6. 6. Diamond OperatorMap<Person, List<Address>> Underscores in numeric literalsstatic final int ONE_MILLION = 1_000_000
  7. 7. Fork/Join Frameworkpublic class FileSizeFinder extends RecursiveTask<Long> { private final File file; public FileSizeFinder(File theFile) { file = theFile; } @Override public Long compute() { long size = 0; if (file.isFile()) return file.length(); File[] children = file.listFiles(); if (children == null) return size; List<ForkJoinTask<Long>> tasks = new ArrayList<>(); for (File child : children) { if (child.isFile()) size += child.length(); else tasks.add(new FileSizeFinder(child)); } for (ForkJoinTask<Long> task : invokeAll(tasks)) size += task.join(); return size; }}long total = new ForkJoinPool().invoke(new FileSizeFinder(new File(rootName)));
  8. 8. Coming in Java 8 – Early (hopefully) 2013• JSR 335: Project Lambda• JSR TBD: Language support for collections• JSR 308: Annotations on Java types• JSR 310: Date and Time API (from JodaTime)• JSR 294: Language and VM support for modular programming• JSR TBD: Project Jigsaw (Modularization)
  9. 9. Project Lambda - Backgroundpublic interface Comparator<T> { Functional int compare(T o1, T o2);} InterfaceCollections.sort(strings, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); }});• Bulky syntax• Confusion surrounding the meaning of names and this• Inability to capture non-final local variables• Inability to abstract over control flow
  10. 10. Lambda ExpressionsCollections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2)); Target typingComparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); Method referenceCollections.sort(strings, String::compareToIgnoreCase);
  11. 11. Lambda support for collectionsdouble maxScore = 0;for (Student s : students) { if (s.gradYear == 2011) { maxScore = Math.max(maxScore, s.score); }}double maxScore = students.parallel() .filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0, Math::max);
  12. 12. Default methodsinterface Iterator<E> { boolean hasNext(); E next(); void remove(); void skip(int i) default { for (; i > 0 && hasNext(); i--) next(); } boolean filter default Iterables::filter}
  13. 13. What to expect from Java 9
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×