Java 7, 8 & 9 - Moving the language forward
Upcoming SlideShare
Loading in...5
×
 

Java 7, 8 & 9 - Moving the language forward

on

  • 2,722 views

 

Statistics

Views

Total Views
2,722
Views on SlideShare
2,084
Embed Views
638

Actions

Likes
2
Downloads
52
Comments
0

13 Embeds 638

http://debop.blogspot.kr 605
http://debop.blogspot.com 14
http://debop.blogspot.jp 5
http://www.linkedin.com 2
http://debop.blogspot.co.il 2
http://debop.blogspot.de 2
http://debop.blogspot.com.au 2
http://www.hanrss.com 1
http://debop.blogspot.fr 1
http://debop.blogspot.com.es 1
http://debop.blogspot.co.uk 1
https://www.linkedin.com 1
http://debop.blogspot.ca 1
More...

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 7, 8 & 9 Moving the language forwardby Mario FuscoRed Hat – Senior Software Engineermario.fusco@gmail.comtwitter: @mariofusco
    • 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)
    • Switch on Stringsswitch(dayOfWeek) { case "Monday" : System.out.println("Start of week"); break; .... case "Sunday" : System.out.println("Hurrey.. its weekend"); break;}
    • 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"); }}
    • 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); }}
    • 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 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)));
    • 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)
    • 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
    • Lambda ExpressionsCollections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2)); Target typingComparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); Method referenceCollections.sort(strings, String::compareToIgnoreCase);
    • 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);
    • 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}
    • What to expect from Java 9