Broken example in spec ?
Srikanth S Adayapalam
srikanth_sankaran at in.ibm.com
Sat Feb 9 20:10:39 PST 2013
0.6.1 - 9.8, Discussion & motivation box, second bullet says:
// --------8< -----------------
Under the current definition, a functional interface may be parameterized
in a way that produces distinct abstract methods—that is, multiple methods
that cannot be legally overridden with a single declaration. For example:
interface I { Object m(); }
interface J<S> { S m(); }
interface K<T> { T m(); }
interface Functional<S,T> extends I, J<S>, K<T> {}
Interface Functional is functional—I.m is return-type-substitutable for
the other two—but Functional<String,Integer> clearly cannot be implemented
with a single method. This situation is acceptable, however: when
functional interfaces are implicitly implemented, the overriding
effectively occurs generically; instantiation of type parameters only
occurs at the use site. In other words, if a lambda expression represents
a Functional<String,Integer>, its treatment is similar to that of the
following:
class FunctionalImpl<S,T> implements Functional<S,T> { ... }
Functional<String,Integer> f = new FunctionalImpl<String,Integer>();
// --------8< -----------------
I think this part needs a careful relook - Both javac 8b74 and eclipse
refuse to compile this snippet *precisely* for the reason that certain
parameterization could run into unrelated return types.
Ergo, `Functional' is not even a legal interface - let alone a functional
interface.
Let me know if I have missed some nuance here.
Thanks!
Srikanth.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/lambda-spec-experts/attachments/20130209/a55e4c61/attachment.html
More information about the lambda-spec-experts
mailing list