EclipseCon NA 2014 | JDT Embraces Lambda Expressions
1
Srikanth SankaranIBM India
Stephan HerrmannGK Software
Noopur Gupta
IBM India
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
2
Java 8 features:
JSR335 - Project Lambda
Lambda Expressions & Method References
Extensions to
Overload resolution & Type inference
Support for “code carrying” interface methods.
JSR308 - Type Annotations
JEP120 - Repeating Annotations
JEP118 - Method Parameter Reflection
JSR269 - Pluggable Annotation Processor API &
javax.lang.model API enhancements for Java 8
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
3
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
4
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
5
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
6
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
7
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
8
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
9
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
10
LambdaExpression ::= LambdaParameters '->' LambdaBody
LambdaParameters -> BeginLambda LambdaParameterList
LambdaParameterList -> '(' FormalParameterListopt ')„
LambdaBody -> Expression
LambdaBody -> Block
I i = BeginLambda (x) -> { };
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
11
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
12
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
13
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
14
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
15
Scanning + Parsing => Parse tree
+ Resolution => Resolved parse tree
+ Data/control flow analysis => Flow analyzed parse tree
+ Code generation => Class files.
() -> { throw new Exception(); } is void and value compatible.
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
16
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
17
o Changes the very notion of a type.
o Some subsystems should view @NonNull String != @ReadOnly String
o while others should view them as being the same.
o Abstractions need to support either world view efficiently.
String is a String is a String
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
18
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
19
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
20
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
21
Collectors.<Person,String,Integer>toMap(..)
Collectors.toMap(..)
Collector<String,Integer> coll = new MyCollector<>();
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
22
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
23
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
24
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
25
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
26
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
27
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
28
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
29
Recipe for disaster:● implement java.util.List → compile against JRE 7 → OK
● upgrade to JRE 8 but compile as 1.7
Undefined compiler behavior● 1.7 compiler cannot handle default methods (from .class)
● exact answer depends on compiler implementation details
● there is no specification
● ecj and javac differ
● assimilation is difficult
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
30
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
31
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
Enter
+Ctrl 1
32
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
33
Enter
+Ctrl 1
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
34
Enter
+Ctrl 1
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
35
Enter
+Ctrl 1
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
36
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
37
Lambda Expression:
Method Reference:
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
38
Demo
Examples:
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
39
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
40
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
41
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
42
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
43
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
44
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
45
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
46
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
47
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
48
Far too risky to
cram late into 8
(Nov 2013)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
49
List <: List<String> ?
Raw types
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
50
“Problem detected during type inference: ...”
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
51
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
52
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
53
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
54
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
55
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
56
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
57
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
58
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
59
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
60
Dramatis personæ - The usual suspects
Jay Arthanareeswaran
Deepak Azad
Shankha Banerjee
Anirban Chakarborty
Vikas Chandra
Noopur Gupta
Ayushman Jain
Manju Mathew
Manoj Palat
Srikanth Sankaran
Sarika Sinha
Jesper S. Møller
Stephan Herrmann
Markus Keller
Dani Megert
Andy Clement
Steve Francisco
Michael Rennie
Olivier Thomann
Curtis Windatt
Walter Harley
David Williams
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
61
EVALUATE THIS SESSION
Sign-in: www.eclipsecon.org
Select session from schedule
Evaluate:
1
2
3