Valhalla removes the historical performance tax on tiny domain objects. This article argues that value classes finally make domain‑safe primitives practical in real systems — strong invariants, flat layout, no wrapper overhead. I’d love feedback from folks who’ve experimented with Valhalla or have opinions on modelling domain types in Java.
> Value classes cannot be null. Won't this be an issue for JPA/JSONB? `null` is a an important and value in JSON and nearly every database, and for modeling the real world.
record Person(String name, Age age, Iban iban) {}
// {"name": "SuperMario", "age": null, "iban": null}
Person result = mapper.readValue(json, Person.class);
assertThat(result.age()).isNull(); // passes — value class field, null
assertThat(result.iban()).isNull(); // passes — value class field, null
Jackson bypasses the constructor for null JSON tokens (getNullValue() short-circuits), so the
validation in new Age(...) never runs. Both Age and Iban are value classes; both fields are null.
What do you think? Of course, there are limitations as Person cannot be flattened anymore but I guess Valhalla will ship more JEPs later?