project lambda in java se 8 - qconsf.com · copyright © 2012, oracle and/or its affiliates. all...
TRANSCRIPT
![Page 1: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/1.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 131
Project Lambda in Java SE 8Daniel SmithJava Language Designer
Thursday, November 8, 12
![Page 2: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/2.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 132
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
Thursday, November 8, 12
![Page 3: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/3.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
The Java Programming Language
• Around 9,000,000 developers worldwide
• 17 years old
• 4 major revisions (1996, 1997, 2004, 2013...)
• [Insert staggering number] of companies very heavily invested
• Formally standardized and evolved via community
3
Thursday, November 8, 12
![Page 4: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/4.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Evolving a Major Language
• Adapting to change
• Righting what’s wrong
• Maintaining compatibility
• Preserving the core
4
Thursday, November 8, 12
![Page 5: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/5.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 135
Project Lambda:Function Values in Java
Thursday, November 8, 12
![Page 6: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/6.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Object subclass: Widget [ draw: canvas [ ... ] click [ ... ]]
gui add:(Widget new).
(define f (lambda (x) (* x x)))
(map nums f)
Code as Data
6
Thursday, November 8, 12
![Page 7: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/7.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
interface Runnable { void run();}
Thread hello = new Thread(new Runnable() { public void run() { System.out.println(“Hello, world!”); }});
Status Quo in Java 1.1
7
Thursday, November 8, 12
![Page 8: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/8.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
interface Predicate<T> { boolean accept(T arg);}
lines.removeAll(new Predicate<String>() { public boolean accept(String line) { return line.startsWith(“#”); }});
Status Quo in Java 5
8
Thursday, November 8, 12
![Page 9: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/9.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
interface Predicate<T> { boolean accept(T arg);}
lines.removeAll(line -> line.startsWith(“#”));
What We Wish It Looked Like
9
Thursday, November 8, 12
![Page 10: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/10.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Why Functions in Java? Adapting to Change
10
• Widely-adopted programming style• 1995: functions-as-values is too hard to understand• Now: almost everybody has them (even C++)
• Physical constraints cause changing models• 1995: sequential execution, mutation• Today: concurrency, immutability
• A gentle push in the right direction
Thursday, November 8, 12
![Page 11: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/11.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Why Functions in Java? Better Libraries
11
•Lots of applications...
• Our priorities:• Collections• Concurrency
public class ForkBlur extends RecursiveAction { private int[] mSource; private int mStart; private int mLength; private int[] mDestination; public ForkBlur(int[] src, int start, int length, int[] dst) { mSource = src; mStart = start; mLength = length; mDestination = dst; } // Average pixels from source, write results into destination. protected void computeDirectly() { for (int index = mStart; index < mStart + mLength; index++) { mDestination[index] = blur(index, mSource); } } protected static int sThreshold = 10000; protected void compute() { if (mLength < sThreshold) { computeDirectly(); return; } int split = mLength / 2; invokeAll(new ForkBlur(mSource, mStart, split, mDestination), new ForkBlur(mSource, mStart + split, mLength - split, mDestination)); } }
Thursday, November 8, 12
![Page 12: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/12.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Brief History
• 1997: Odersky/Wadler experimental “Pizza” work
• 1997: Java 1.1 with anonymous classes
• 2006-2008: Vigorous community debate
• 2009: OpenJDK Project Lambda formed
• 2010: JSR 335 filed
12
Thursday, November 8, 12
![Page 13: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/13.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1313
Java 8 Language Concepts & Features
Lambda expressions Functional interfaces Target typing Method references Default methods
Thursday, November 8, 12
![Page 14: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/14.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Lambda Expressions
14
Thursday, November 8, 12
![Page 15: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/15.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
widget -> { if (flag) widget.poke(); else widget.prod();}
(int x, int y) -> { assert x < y; return x*y;}
x -> x+1
(s,i) -> s.substring(0,i)
(Integer i) -> list.add(i)
() -> System.out.print(“x”)
cond -> cond ? 23 : 57
Lambda Expressions
15
Thursday, November 8, 12
![Page 16: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/16.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
void cut(List<String> l, int len) {
l.updateAll(s -> s.substring(0, len));
}
Variable Capture
16
• Lambdas can refer to variables declared outside the body
• These variables can be final or “effectively final”
• Works for anonymous classes, too
Thursday, November 8, 12
![Page 17: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/17.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Meaning of Names in Lambdas
17
• Anonymous classes introduce a new “level” of scope• ‘this’ means the inner class instance• ‘ClassName.this’ is used to get to the enclosing class instance• Inherited names can shadow outer-scope names
• Lambdas reside in the same “level” as the enclosing context• this refers to the enclosing class• No new names are inherited• Like local variables, parameter names can’t shadow other locals
Thursday, November 8, 12
![Page 18: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/18.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Functional Interfaces
18
Thursday, November 8, 12
![Page 19: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/19.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
String -> int
(String, int, boolean) -> List<? extends Integer>
(String, Number) -> Class<?> throws IOException
Function Types in Java?
19
Thursday, November 8, 12
![Page 20: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/20.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Function Types in Java: Functional Interfaces
20
Thursday, November 8, 12
![Page 21: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/21.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Common Existing Functional Interfaces
• java.lang.Runnable
• java.util.concurrent.Callable<V>
• java.security.PrivilegedAction<T>
• java.util.Comparator<T>
• java.io.FileFilter
• java.nio.file.PathMatcher
• java.lang.reflect.InvocationHandler
• java.beans.PropertyChangeListener
• java.awt.event.ActionListener
• javax.swing.event.ChangeListener
21
Thursday, November 8, 12
![Page 22: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/22.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Attributes of Functional Interfaces
• Parameter types
• Return type
• Method type arguments
• Thrown exceptions
• An expressive, reifiable type name (possibly generic)
• An informal contract
22
Thursday, November 8, 12
![Page 23: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/23.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Shiny New Functional Interfaces*
• java.util.functions.Predicate<T>
• java.util.functions.Factory<T>
• java.util.functions.Block<T>
• java.util.functions.Mapper<T, R>
• java.util.functions.BinaryOperator<T>
23
* Names and concepts in libraries are still tentative
Thursday, November 8, 12
![Page 24: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/24.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
/** Creates an empty set. */public interface SetFactory { <T> Set<T> create();}
/** Performs a blocking, interruptible action. */public interface BlockingTask<T> { <T> T run() throws InterruptedException;}
Declare Your Own
24
Thursday, November 8, 12
![Page 25: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/25.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Target Typing
25
Thursday, November 8, 12
![Page 26: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/26.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
// Runnable: void run()Runnable r = () -> System.out.println(“hi”);
// Predicate<String>: boolean test(String arg)Predicate<String> pred = s -> s.length() < 100;
Assigning a Lambda to a Variable
26
Thursday, November 8, 12
![Page 27: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/27.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Object o = () -> System.out.println(“hi”);
// Predicate<String>: boolean test(String arg)Predicate<String> pred = () -> System.out.println(“hi”);
Target Typing Errors
27
Thursday, November 8, 12
![Page 28: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/28.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
long[][] arr = { { 1, 2, 3 }, { 4, 5, 6 } };
List<? extends Number> nums = Collections.emptyList();
Set<Map<String, Object>> maps = new HashSet<>();
Target Typing in Java 7
28
Thursday, November 8, 12
![Page 29: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/29.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
class Thread { public Thread(Runnable r) { ... }}
// Runnable: void run()new Thread(() -> System.out.println(“hi”));
Target Typing for Invocations
29
Thursday, November 8, 12
![Page 30: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/30.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
interface Stream<T> { Stream<T> filter(Predicate<T> pred);}
Stream<String> strings = ...;
// Predicate<T>: boolean test(T arg)strings.filter(s -> s.length() < 100);
Target Typing for Invocations
30
Thursday, November 8, 12
![Page 31: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/31.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
<T> int m(Predicate<T> p);int m(FileFilter f);<S,T> int m(Mapper<S,T> m);
m(x -> x == null);
A Recipe for Disaster(Or: A Recipe for Awesome)
31
• Target typing
• Overload resolution
• Type argument inference
Thursday, November 8, 12
![Page 32: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/32.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Object o = (Runnable) () -> System.out.println(“hi”);
Runnable r = condition() ? null : () -> System.gc();
Mapper<String, Runnable> m = s -> () -> System.out.println(s);
Other Target Typing Contexts
32
Thursday, November 8, 12
![Page 33: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/33.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Method References
33
Thursday, November 8, 12
![Page 34: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/34.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
(x, y, z) -> Arrays.asList(x, y, z)
(str, i) -> str.substring(i)
() -> Thread.currentThread().dumpStack()
(s) -> new File(s)
Boilerplate Lambdas
34
Thursday, November 8, 12
![Page 35: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/35.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
(x, y, z) -> Arrays.asList(x, y, z)Arrays::asList(str, i) -> str.substring(i)String::substring() -> Thread.currentThread().dumpStack()Thread.currentThread()::dumpStack(s) -> new File(s)File::new
Method (and Constructor) References
35
Thursday, November 8, 12
![Page 36: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/36.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Resolving a Method Reference
36
• Target type provides argument types
• Named method is searched for using those argument types• Searching for an instance method, the first parameter is the receiver
• Return type must be compatible with target return
Thursday, November 8, 12
![Page 37: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/37.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Mapper<Byte, Set<Byte>> m1 = Collections::singleton;
// SetFactory: <T> Set<T> create()SetFactory f2 = Collections::emptySet;
Mapper<Queue<Float>, Float> m2 = Queue::peek;
Factory<Set<String>> f3 = HashSet::new;
Method References & Generics
37
Thursday, November 8, 12
![Page 38: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/38.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Default Methods
38
Thursday, November 8, 12
![Page 39: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/39.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
New abstract methods: Bad
interface Widget { double weight(); double volume();
double density();}
New concrete methods: Good
abstract class Widget { abstract double weight(); abstract double volume();
double density() { return weight()/volume(); }}
Evolving APIs
39
Thursday, November 8, 12
![Page 40: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/40.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
class Widgets {
static double density(Widget w) { return w.weight()/w.volume(); }
}
Workaround: Garbage Classes
40
• Not really a class
• Non-idiomatic invocation syntax
• Non-virtual
Thursday, November 8, 12
![Page 41: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/41.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
interface Widget { double weight(); double volume();
default double density() { return weight()/volume(); }}
Default Methods: Code in Interfaces
41
Thursday, November 8, 12
![Page 42: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/42.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Multiple Inheritance?
42
class C:concrete m()
interface I:default m()
class D
interface I:default m()
interface J:abstract m()
interface K
interface J:default m() interface K
class C
interface I:default m()
Thursday, November 8, 12
![Page 43: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/43.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
interface Enumeration<E> extends Iterator<E> { boolean hasMoreElements(); E nextElement();
default boolean hasNext() { return hasMoreElements(); } default E next() { return getNext(); } default void remove() { throw new UnsupportedOperationException(); }
default void forEachParallel(Block<T> b) { ... }}
Evolving the Java Standard API
43
Thursday, November 8, 12
![Page 44: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/44.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Summary
44
Thursday, November 8, 12
![Page 45: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/45.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Goals for Project Lambda
45
• Make dramatic & necessary enhancements to the programming model
• Smooth some rough edges in the language
• Preserve compatibility
• Maintain the essence of the Java language
Thursday, November 8, 12
![Page 46: Project Lambda in Java SE 8 - qconsf.com · Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13](https://reader035.vdocument.in/reader035/viewer/2022070110/604b78705fce1f4e244e6c2f/html5/thumbnails/46.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13
Learning More
•OpenJDK: openjdk.java.net/projects/lambda
•JSR 335: www.jcp.org/en/jsr/detail?id=335
• Me: [email protected]
• Download it and try it out!
46
Thursday, November 8, 12