Record component type can be an inner class of a record

Brian Goetz brian.goetz at
Tue Mar 24 21:06:07 UTC 2020

It is kind of weird, though, when Bar is not static, since you can't 
create a Bar without having a Foo in hand, and you can't create a Foo 
without a Bar.  You could cheat and do this:

     Foo f = new Foo(null);
     Bar b = Bar(...);
     Foo ff = new Foo(b);

but I doubt anyone will find this technique useful for anything other 
than a puzzler...

On 3/24/2020 4:57 PM, Remi Forax wrote:
> Hi all,
> a record component can use as type a type declared inside the record itself,
> in term of scoping it's like if the record component is part of the internal scope of the record.
> record Foo(Bar bar) {
>    class Bar {
>    }
> }
> I think it's the right behaviour but i was not able to find any reference to that in the spec.
> regards,
> Rémi

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the amber-spec-experts mailing list