Reflection on records
David Alayachew
davidalayachew at gmail.com
Mon Dec 1 14:16:02 UTC 2025
Ty vm. Will look into it, and more.
On Mon, Dec 1, 2025, 9:10 AM Tagir Valeev <amaembo at gmail.com> wrote:
> I don't think there are any published JEPs. Here's some information about
> the project:
> https://openjdk.org/projects/babylon/
>
> On Mon, Dec 1, 2025, 15:08 David Alayachew <davidalayachew at gmail.com>
> wrote:
>
>> Understood. Thanks for clarifying. For now, I'll hold off on that, as I
>> don't know how stable that is, and I don't really want to.build this new
>> library off of it. Maybe when the respective JEP goes into preview. Could
>> you link me to that JEP, or is there not one yet?
>>
>> On Mon, Dec 1, 2025, 9:01 AM Tagir Valeev <amaembo at gmail.com> wrote:
>>
>>> Yes, you have to build it from the Babylon repo.
>>>
>>> On Mon, Dec 1, 2025, 14:35 David Alayachew <davidalayachew at gmail.com>
>>> wrote:
>>>
>>>> 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/b11a31d0/attachment.htm>
More information about the amber-dev
mailing list