import org.checkerframework.checker.nullness.qual.NonNull; class ClientBuilder<T extends @NonNull ClientBuilder<T>> { static @NonNull ClientBuilder<?> newBuilder() { return new BuilderImpl(); } // Dummy class to get the recursive Builder typing right. static class BuilderImpl extends ClientBuilder<BuilderImpl> {} T setThing() { return (T) this; } }