Reflection on records

David Alayachew davidalayachew at gmail.com
Mon Dec 1 13:35:15 UTC 2025


Thanks @Tagir Valeev <amaembo at gmail.com>.

I am still not great at the stuff Babylon is doing, so I can only roughly
follow along. Regardless, it sounds like this is depending on Babylon
features which have not yet landed in the mainline jdk, yes?


On Mon, Dec 1, 2025, 5:22 AM Tagir Valeev <amaembo at gmail.com> wrote:

> I think this will surely be possible for RecordComponents with code
> reflection (project Babylon), using the syntax you propose.
>
> You can create a quotable function like this:
>
> import jdk.incubator.code.*;
>
> @Reflect
> @FunctionalInterface
> interface Accessor {
>   Object get(Record r);
> }
>
> Then create something like (just a sketch, sorry, I have no time now to
> provide a full-fledged sample):
>
> static RecordComponent foo(Accessor acc) {
>   Quoted q = Op.ofQuotable(acc).orElseThrow();
>   // extract a method handle from q using Babylon API
>   // unreflect it and find the corresponding RecordComponent
> }
>
> With best regards,
> Tagir Valeev
>
> On Sat, Nov 29, 2025 at 8:45 PM David Alayachew <davidalayachew at gmail.com>
> wrote:
>
>> Hello @amber-dev <amber-dev at openjdk.org>,
>>
>> I asked this on core-libs-dev already, but I figured I should ask here
>> too.
>>
>> Let's say I have some record User(String firstName, String lastName) {}.
>>
>> Is there any possible way for me to do the following?
>>
>> java.lang.reflect.RecordComponent firstName = foo(User::firstName);
>>
>> I'll even accept this.
>>
>> java.lang.reflect.Method lastName = foo(User::lastName);
>>
>> Thank you for your time and consideration.
>> David Alayachew
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20251201/d411204d/attachment.htm>


More information about the amber-dev mailing list