JSR 335 Lambda Specification, 0.9.0

Dan Smith daniel.smith at oracle.com
Fri Dec 20 16:33:47 PST 2013

An updated specification can be found here:


This is also the Proposed Final Draft; full materials (including API specs) can be found here:


Other links
Diff: http://cr.openjdk.java.net/~dlsmith/jsr335-0.9.0-diff.html
One-page HTML: http://cr.openjdk.java.net/~dlsmith/jsr335-0.9.0.html
Downloadable zip: http://cr.openjdk.java.net/~dlsmith/jsr335-0.8.0.zip
Downloadable PFD zip: http://cr.openjdk.java.net/~dlsmith/jsr335-pfd.zip

The list of bugs identified since 0.7.0 is here; all have been resolved.

Full change log, from the document:

> Functional Interfaces: Introduced the term non-wildcard parameterization as an intermediate step when deriving a function type. Clarified when intersection types are used. Cleanup of some old discussion.
> Lambda Expressions: Cleanup of some old discussion.
> Method References: Prohibited use of constructor type arguments with diamond inference. Separated TypeName::m and ReferenceType::m as two distinct grammatical forms.
> Poly Expressions: Grammatical changes so that a LambdaExpression is no longer a Primary, in order to address ambiguities.
> Typing and Evaluation: Introduced the ground target type as an intermediate step towards deriving a function type. Checked that there are no overriding errors when the lambda or method reference overrides the methods of this type. Described exactly which methods are overridden, and which (erasure-based) casts occur at runtime. Accommodated the additionalTypeName::m syntactic form of a method reference. Described how references to signature-polymorphic methods are handled. Added new changes to 13.1 to account for method references.
> Overload Resolution: Asserted that, for a more-specific test of two functional interfaces targeted by an exact method references, the parameter types are the same. Cleaned up the rules for deriving the actual target types of invocation arguments when unchecked conversion was necessary.
> Type Inference: Mirrored the changes in Parts E and F. Clarified how inference variables in a wildcard-parameterized target type of an explicitly-typed lambda expression are handled, and cleaned up the section describing functional interface parameterization inference. Clarified how subtyping and equality constraints handle non-parameterized inner classes of parameterized types. Added an incorporation rule to check consistency of parameterized upper bounds. Cleaned up the treatment of ? extends Object, which should be equivalent to ?. Added some overlooked resolution dependencies on capture inference variables. Added rules to invocation type inference to special-case when the return type is an inference variable, and may end up either being wildcard-parameterized or requiring unchecked conversion. Explicitly moved the definition of lub to 4.10.4.
> Default Methods: Prohibited invoking a static interface method with an expression qualifier.


More information about the lambda-spec-experts mailing list