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 <[email protected]> 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 <[email protected]> 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. >> >
