1. 7, 8 & 9
Moving the language forward
by Mario Fusco
Red Hat – Senior Software Engineer
mario.fusco@gmail.com
twitter: @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 Strings
switch(dayOfWeek) {
case "Monday" :
System.out.println("Start of week");
break;
....
case "Sunday" :
System.out.println("Hurrey.. its weekend");
break;
}
7. Fork/Join Framework
public 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 - Background
public interface Comparator<T> { Functional
int compare(T o1, T o2);
} Interface
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