8.4 lazy objects, applied to a service whose constructor opens a connection and which fires on 3% of requests. This replaces a hand-written proxy class that existed only…
An interface added in 2023 against the rule that says not to, and a second implementation in 2025 that vindicated it by accident. The rule about interfaces with…
A readonly value object that wanted a lazily computed cache, which is exactly what readonly forbids and is usually a signal. The wrapper is the textbook answer and…
Eleven exception classes, all extending one application root, and no intermediate types — which turned out to be right. An intermediate class exists so a caller can catch…
8.4 allows chaining on a new expression without wrapping it, which is a small improvement that invites a bigger mistake. The parentheses were noise on a one-call chain…
A backed enum hydrated from a database column, and a row written in 2019 with a value the enum does not have. from() throwing is correct behaviour and…
A template annotation that was correct, and a call site the analyser widened to mixed anyway. A class name in a variable is where the type system ends,…
Interfaces that declare properties rather than accessors, half a year after 8.4, and the one place it changed a design. The gain is that an interface can now…