Valhalla breaks minimal-j framework
Bruno Eberhard
bruno.eberhard at pop.ch
Wed Nov 26 09:43:30 UTC 2025
Hi,
I really like the concepts and the gains you make with Valhalla. But it
breaks some essential points of my framework called «minimal-j» (on
https://github.com/BrunoEberhard/minimal-j ). I would kindly ask if you
can provide a replacement for what is not possible in Valhalla anymore.
Let me show the problem and then propose a solution. In the minimal
design all fields of a class representing a business entity (only those)
are public. No getter or setter. Then a static constant $ is defined
like this:
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.
With theses references a UI can be specified:
var form = new Form<Person>();
form.line($.number);
form.line($.name);
form.line($.address.city);
Or a query to the persistence layer can be formulated:
Backend.find(Person.class, By.field($.name, "Bruno"));
Backend.find(Person.class, By.field($.address.zip, 8000));
In the background the framework fills the fields of the $ constant with
values that are later used to identify which field should be used. For
this identity is vital. Things like "new String(..)" and "new
Integer(..)" is used to make $.number unique.
If Integers loose their identity this is now longer feasable.
A possible replacement for this trick would be references to fields.
Best in this way:
Backend.find(Person.class, By.field(Person::name, "Bruno"));
Person::name should result in a java.lang.reflect.Field
Backend.find(Person.class, By.field(Person::address::zip, 8000));
Here Person::address::zip should result in a java.lang.reflect.Field[]
or in a new class containing chained Fields.
Of course I could instead write getter and setter and the use
Person::getName . But Person::getAddress::getZip doesn't work. And I
would really like not to have getter and setter (for which I have to
check all names and parameters are correct). Lombok or Kotlin hide
getter and setter. But I don't really like hiding something. Especially
if it is not really needed.
So if it is possible to add this construct to the java language it would
make me really happy. Otherwise I would never be able to use a Java
version which contains Valhalle for this kind of framework.
regards
More information about the valhalla-dev
mailing list