What
is the closure debate?
A
discussion in 2006-2009 of three proposals for a lambda-like language feature;
all three proposals were discarded.
|
|
Why
does the Java programming language need lambda expressions?
Because
many modern programming languages have a similar language features., as
a preparation for fine-grained automated parallelization on multi-core
hardware, in particular for bulk operations on collections.
|
|
What
is a lambda expression in Java?
A
concise notation for a method without a name.
|
|
What
do lambda expression and anonymous inner classes have in common?
Both
are used to implement ad-hoc functionality aka anonymous methods.
|
|
What
is a method? What is a function? How do they differ?
Functions
are executed, but also passed around like data. They do not mutate data;
they just produce new results. The order of their invocation does not matter.
Methods
are executed and may mutate data and produce side effects. The invocation
order matters.
|
|
What
is a pure function as opposed to an impure function?
A
pure function never modifies any data, whereas an impure function may produce
side effects.
|
|
How
is a lambda expression represented at runtime?
By
a lambda object; both the lambda object and its type are dynamically created
by the virtual machine at runtime.
|
|
What
is the type of a lambda expression?
In
isolation a lambda expression has no definite type; its type depends on
the context in which it appears and is inferred by the compiler
.
|
|
What
is the target type of a lambda expression?
A
type to which the lambda expression can be converted in a given context;
the target type must be a functional interface type.
|
|
What
is a functional interface?
An
interface with a single abstract method.
|
|
How
does the syntax of lambda expressions differ from the syntax of anonymous
inner class?
The
syntax of lambda expressions is less verbose and more readable.
|
|
For
an anonymous inner class type definition and instance creation are tied
together. How are lambda expression translated?
Creation
of the lambda object and its type is implicitly taken care of by the
virtual machine; it is done at runtime.
|
|
Anonymous
inner class can have bindings to variables of the enclosing scope. Is
the same true for lambdas?
Yes,
lambda expressions can capture effectively final variables from their enclosing
scope and can bind to the enclosing instance via
this
and
super
.
|
|
An
anonymous inner class is a name scope of its own. How about lambda expressions?
Lambda
expressions are part of the scope in which they appear; they are not scopes
of their own.
|
|
What
does
this
refer to in a lambda expression?
It
refers to the enclosing instance (different from an anonymous class where
this
refers to the inner class's instance).
|
|
What
do we need lambda expressions in Java for?
To
enable convenient use of the overhauled collection framework in general
and it parallel bulk operations in particular.
|
|
What
is a bulk operation?
An
operation that concern many or all elements in a sequence.
|
|
What
is internal and external iteration?
External
iteration uses an iterator for access to all sequence elements. Internal
iteration is performed by the sequence itself; the user just supplies an
operation to be applied to all sequence elements.
|
|
What
is a stream?
An
abstraction from the JDK collection framework that supports bulk operations
with internal iteration. There are sequential and parallel streams.
|
|
What
is filter-map-reduce?
Typical
bulk operation on sequences with internal iteration.
|
|
What
is fluent programming?
A
programming technique that chains operations, i.e., a style where operations
return a value that allows the invocation of another operation.
|
|
What
is declarative programming?
A
programming
style
that describe what to rather than how to do it.
|
|
What
is pipelining?
An
optimization for chained operations. Rather than looping over all elements
in the sequence repeatedly (per operation in the chain) the entire chain
of operations is applied to each element in just one pass over the sequence.
|
|
What
is the execute-around-method patter?
A
programming technique for eliminating code duplication.
|
|
What
is a default method?
An
interface method with a default implementation.
|
|
What
are default methods intended for?
The
are used for interface evolution, i.e., extending existing interfaces with
additional methods without breaking any implementing classes.
|
|
Does
multiple inheritance lead to problems with ambiguities?
Yes,
there arise ambiguities with inheritance of default methods, but they are
easily resolved using the right syntax.
|
|
Does
Java with default methods have multiple inheritance (of implementation)?
Yes,
a class can inherit non-abstract methods from one superclass and multiple
interfaces.
|
|