Java 7, 8 & 9 - Moving the language forward

13
y Mario Fusco ed Hat – Senior Software Engineer [email protected] witter: @mariofusco 7, 8 & 9 Moving the language forward

description

 

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

Page 1: Java 7, 8 & 9 - Moving the language forward

by Mario FuscoRed Hat – Senior Software [email protected]: @mariofusco

7, 8 & 9Moving the language forward

Page 2: Java 7, 8 & 9 - Moving the language forward

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)

Page 3: Java 7, 8 & 9 - Moving the language forward

Switch on Stringsswitch(dayOfWeek) { case "Monday" : System.out.println("Start of week"); break; .... case "Sunday" : System.out.println("Hurrey.. its weekend"); break;}

Page 4: Java 7, 8 & 9 - Moving the language forward

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"); }}

Page 5: Java 7, 8 & 9 - Moving the language forward

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); }}

Page 6: Java 7, 8 & 9 - Moving the language forward

Diamond OperatorMap<Person, List<Address>>

Underscores in numeric literals

static final int ONE_MILLION = 1_000_000

Page 7: Java 7, 8 & 9 - Moving the language forward

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)));

Page 8: Java 7, 8 & 9 - Moving the language forward

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)

Page 9: Java 7, 8 & 9 - Moving the language forward

Project Lambda - Backgroundpublic interface Comparator<T> { int compare(T o1, T o2); }

Collections.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

Functional Interface

Page 10: Java 7, 8 & 9 - Moving the language forward

Lambda ExpressionsCollections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2));

Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);

Target typing

Method referenceCollections.sort(strings, String::compareToIgnoreCase);

Page 11: Java 7, 8 & 9 - Moving the language forward

Lambda support for collectionsdouble maxScore = 0;for (Student s : students) { if (s.gradYear == 2011) { maxScore = Math.max(maxScore, s.score); }}

double maxScore = students .filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0, Math::max);

.parallel()

Page 12: Java 7, 8 & 9 - Moving the language forward

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}

Page 13: Java 7, 8 & 9 - Moving the language forward

What to expect from Java 9

• Self tuning JVM• Improved native integration• Big data support (array.length > )• Generics reification• Primitive unification• Break backward compatibility (?)