JEP 118 works with Lambda ?
Luan Cestari
luan.cestari at gmail.com
Wed Apr 16 18:43:47 UTC 2014
Hi, Good morning/afternoon/evening! =)
I got this email from a reply of help at openjdk.java.net ( from
https://bugs.openjdk.java.net/secure/Dashboard.jspa , where I was thinking
to create an issue (maybe for enhance or bug, not really sure).
I got a problem during a test using the getName from Parameter (from JEP
118, new in Java 8) with Lambda expression (also new in Java 8). I made a
simple class to reproduce the issue which I posted here
https://gist.github.com/luan-cestari/10902418 , where the getName works
fine using other classes like in this other code I made
https://gist.github.com/luan-cestari/10902332. I started to investigate
that after I saw a gist ( https://gist.github.com/galdosd/10823529, which
also created a discussion on
http://www.reddit.com/r/java/comments/2360is/pretty_map_literals_for_java_8/)
saying that feature worked fine for him, so I talked with some guys in
IRC ( OFTC#openjdk ), but we wasn't sure if it is a bug or not.
I searched a bit and I found the following:
- In http://openjdk.java.net/jeps/118 , it doesnt say about any
exception around the Lambda functions
- In Oracle documentation it mentions the JVM parameter that have to be
used during the compilation to that work fine
http://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html
- In javadoc there is no more details about that (I think it could make
more clear that there is a JVM parameter or maybe it is possible to have
this kind of parameter. Also it could say about execptions such as Lambda
expressions)
http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Parameter.html#getName--
- I also saw a mail list (
http://mail.openjdk.java.net/pipermail/lambda-dev/2013-January/007548.html)
where Remi and Brian exchanged some mails where he said it is had the
JEP
118 due there are people that want thing in a way and people who doesn't
want some changes
- In that mail, they cited this document
http://cr.openjdk.java.net/~abuckley/8misc.pdf which I think that some
parts of it are in JVM spec (
- http://docs.oracle.com/javase/specs/ like
http://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf and
http://docs.oracle.com/javase/specs/jls/se8/jls8.pdf
- ) but it just say the class structure in bytecode, nothing about
Lambda and JEP 118
As far as I know, Lambda will create some symbolic invocation using
invokedynamic which is different than creating anonymous classes, so this
might be the root cause of the issue. But maybe there is some difference in
the native implementations (for example, in my case I'm using Fedora 20
with OpenJDK Runtime Environment (build 1.8.0-b132) / OpenJDK 64-Bit Server
VM (build 25.0-b70, mixed mode)). In the IRC, people said that maybe the
IDE was generating the inner classes to make it work, but that would make a
problem during the runtime if a different tool (like maven) compiles the
project.
In summary, is the right behavior for JEP 118 return argx due lambda
expressions? Maybe we could enhance it to make some new features (for Java
9 ).
Thank you in advance,
Kindest regards,
Luan Cestari
"All the gold which is under or upon the earth is not enough to give in
exchange for virtue."
Plato
"At his best, man is the noblest of all animals; separated from law and
justice he is the worst."
"A true friend is one soul in two bodies."
Aristotle
"The only limit to your impact is your imagination and commitment."
Tony Robbins
More information about the lambda-dev
mailing list