The Keys.of(Class) method goes recursively through all the fields and
sets unique values to the fields. The values are stored in a Map in the
Keys class and identify the fields / properties:
private static final Map<Object, Property> properties = new
IdentityHashMap<>();
Note that if the Address class has its own $ constant then the values
there would be different. So Address.$.zip has a different identity than
Person.$.address.zip.
These are all just tricks to emulate the missing construct
"Person::name" or "Person::address::zip" . I would gladly do it in a
more legal way. Also it gets really messy with enums. And yes I cannot
use int with this. Also not boolean which is the bigger issue. Still
it's really nice to use the $ constant when implementing applications.
Am 01.12.2025 um 20:04 schrieb Ethan McCue:
Can you elaborate more on how form.line($.address.city); uses the
identity of city?
How does Backend.find(Person.class, By.field($.address.zip,
8000)); figure out that $.address.zip refers to the corresponding field
in Address?
>
> public class Person {
> public static final Person $ = Keys.of(Person.class);
>
> @NotEmpty
> public Integer number;
>
> @Size(100)
> @Searched
> @NotEmpty
> public String name;
>
> public final Address address = new Address();
> }
>
> With the $ constant there is a reference to the fields of the class.