Your SlideShare is downloading. ×
  • Like
Java 7, 8 & 9 - Moving the language forward
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Java 7, 8 & 9 - Moving the language forward

  • 2,589 views
Published

 

Published in Technology , News & Politics
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,589
On SlideShare
0
From Embeds
0
Number of Embeds
11

Actions

Shares
Downloads
58
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 7, 8 & 9 Moving the language forwardby Mario FuscoRed Hat – Senior Software Engineermario.fusco@gmail.comtwitter: @mariofusco
  • 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. Switch on Stringsswitch(dayOfWeek) { case "Monday" : System.out.println("Start of week"); break; .... case "Sunday" : System.out.println("Hurrey.. its weekend"); break;}
  • 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. 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. Diamond OperatorMap<Person, List<Address>> Underscores in numeric literalsstatic final int ONE_MILLION = 1_000_000
  • 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. 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. 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. 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. 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. 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. What to expect from Java 9