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.

Reply via email to