Problem with method references

Rémi Forax forax at univ-mlv.fr
Fri Jan 14 13:19:34 PST 2011


On 01/14/2011 06:44 PM, Brian Goetz wrote:
>> If we follow method/constructor invocation syntax as closely as possible, existing Java developers would grasp the syntax more quickly.
>>
>> The only conceptual addition to method/constructor invocation syntax is prefixing instance method / inner class constructor with declaring / enclosing class name:
>>
>>     DeclaringClassName#instanceMethod
>>
>>     EnclosingClassName#new InnerClass;
>>
>> ... to construct a function that takes an additional 1st argument being an instance of declaring/enclosing class. These two forms have no analogous counterparts as method/constructor invocations so their syntax does not associate to any known concept.
> The bytecode would disagree :)
>
> Inner class constructors show up as constructors that take an outer
> argument.  For a class:
>
> public class Outer {
>     public class Inner {
>     }
> }
>
> the inner class bytecode looks like
>
> public class Outer$Inner extends java.lang.Object{
>     final Outer this$0;
>
>     public Outer$Inner(Outer);
> }
>
> Which means the syntax Inner#new works fine for inner class instances
> too -- if you know about the secret first Outer argument.
>
> Given that this is at least a CC^2 (corner case of a corner case) or
> even a CC^3, I think we don't want to create new syntax for this.
> (Quiz: what percentage of Java developers have used the outer.new
> Inner() syntax?)
>

Another quizz: try to create a code which compiles and use this 
expression: this.super()

Rémi




More information about the lambda-dev mailing list