Name of lambda parameters
Remi Forax
forax at univ-mlv.fr
Tue Jan 8 06:40:37 PST 2013
On 01/08/2013 03:15 PM, Tim Peierls wrote:
> On Tue, Jan 8, 2013 at 3:14 AM, Remi Forax <forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr>> wrote:
>
> On 01/07/2013 07:16 PM, Brian Goetz wrote:
>
> I think this goes into the general bucket of "you can't
> do reflection below the method level in Java", and
> lambda expressions are expressions and therefore below the
> method level. Is lambda somehow special here?
>
> On Mon, Jan 7, 2013 at 5:33 PM, Remi Forax <forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr> <mailto:forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr>>> wrote:
>
> Lambda are anonymous functions, so yes, they are special. They
> can be called, have parameters, like methods so reflection
> should work otherwise you can't specify meta-protocol using
> lambdas and having JEE being able to use lambdas seems a good
> idea.
>
> On 01/08/2013 12:16 AM, Tim Peierls wrote:
>
> What does "you can't specify meta-protocol using lambdas"
> mean, and why is it a reason to add further complexity?
>
>
> In JEE context, a meta-protocols is specified usually by adding
> annotations classes or methods or method parameters to add
> dependency injection, SQL query mapping, JSON mapping, etc.
>
> By example, with lambdas you can write an easy to use API that let
> you decode JSON in a 'streamy' way,
>
> If I want to parse: [...some JSON with firstName, age,
> phoneNumber, etc. ...]
> JSONStream stream = ... (outputStream);
> stream.parse((String firstName, int age, JSONStream phoneNumber) -> {
> System.out.println(firstName + " " + age);
> phoneNumber.parse((String type, String number) -> {
> System.out.println(number);
> }
> });
>
> for that, you need a way to do reflection on parameter names (and
> annotations).
>
>
> If Java had function types, this would make more sense. Sounds like
> you want reflection to help address what you think of as a deficiency
> of the language.
No, it has nothing to do with function type.
>
> It's OK if there are still some things that can't be written more
> compactly with lambdas. You can already implement something like this
> in Java 7:
>
> stream.parse(new Object() {
> String firstName;
> int age;
> void parse(JSONStream phoneNumber) {
> System.out.println(firstName + " " + age);
> phoneNumber.parse(new Object() {
> String type;
> String number;
> void parse() {
> System.out.println(number);
> }
> });
> }
> });
Your example doesn't work if you want the address too (more than one sub
item), and will create too many objects.
>
> I don't think the added complexity of specifying reflection for
> lambdas justifies the marginal (at best) improvement in readability
> that lambdas provide in this example.
We should have a way to get lambda parameter names and parameter
annotations at least just for completeness.
>
> --tim
Rémi
More information about the lambda-libs-spec-observers
mailing list