Reflection on records

David Alayachew davidalayachew at gmail.com
Sun Nov 30 19:41:23 UTC 2025


Thanks for the response Attila.

Let me try and loosen the constraints then -- is there any way for me to
get a RecordComponent corresponding to firstName without needing to do
String comparison?

At the end of the day, that's all that I really need.

As is now, the only way I can see to get a RecordComponent is to drill down
from j.l.Class --> j.l.r.RecordComponent, then do String comparison against
a provided String to get the record component that I want. That is unsafe
and stringly typed, so, very much undesirable. After all, if I change my
record to say first instead of firstName, I want a compiler error. But
doing it that way, I won't -- I'll get a runtime error.

So that's what I really want -- a type-safe way to isolate a record
component from a record, without forcing my users to have to provide a
String corresponding to the record component name.

On Sun, Nov 30, 2025 at 2:16 PM Attila Kelemen <attila.kelemen85 at gmail.com>
wrote:

> I'm pretty sure there is no such thing, because that essentially implies
> the existence of some kind of method literal (well, it would not be
> strictly necessary, but the JLS would feel strange without it), and there
> is no such thing (though it would be awesome, if there was).
>
> Also, note that if this was a thing, then your case is just a very special
> case, and you would want more (I would for sure). That is, in that case, I
> would also want type safety. So, something like MethodReference<(MyRecord)
> -> String> (which of course would require function types in Java).
>
> When I needed this, luckily I could restrain my need to interface methods
> (as opposed to your record getters) where I could create a `Proxy` and see
> which method gets called (nasty hack, has its downsides, but felt like the
> safest to me).
>
> Attila
>
> David Alayachew <davidalayachew at gmail.com> ezt írta (időpont: 2025. nov.
> 29., Szo, 20:50):
>
>> And by all means, add more parameters to foo if you want. For example, if
>> a User.class helps, please do so!
>>
>> I just don't want to do anything like this.
>>
>> foo("firstName");
>>
>> That's stringly typed, and undesirable for my use case.
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20251130/a474418e/attachment.htm>


More information about the amber-dev mailing list