3.3 Preconditions
Although lambda expressions are intended as a more con-
cise alternative to
AIC
, they are not a complete replacement.
There are several preconditions that
LambdaFicator
checks
before refactoring an
AIC
into a lambda expression. These
preconditions are inherent to how lambda expressions are
implemented in Java, not limitations of our tool.
(P1)
AIC
must instantiate from an interface. Instances of
abstract or concrete classes cannot be converted to lambda
expressions.
(P2)
AIC
must have no fields, and declare only one method.
A lambda expression represents a single anonymous func-
tion; therefore, an
AIC
with multiple methods can not be
converted to a single lambda expression.
(P3)
AIC
must not have references to
this
or
super
. In
a lambda expression,
this
and
super
are lexically scoped,
meaning they are interpreted just as they would be in the
enclosing environment, e.g., as if they appeared in the state-
ment before the lambda expression [6]. However, in an
AIC
they refer to the inner class itself.
(P4)
AIC
must not declare a recursive method. In order to
perform the recursive call, we must obtain a reference to the
anonymous function. While
LambdaFicator
could perform
this refactoring, this could introduce unneeded complexity
into the code and harm understandability.