For the caller a constructor behaves similar to a static method that returns an instance. But from the inside a constructor behaves like a void returning instance method, so not being able to specify a value on the return statement is only consistent.
You could mentally model it as new XYZ() first creating an instance initialized to zero in compiler-generated-code and then calling the user-written constructor on that instance, just like a normal instance method.
Something like:
public static T create() // Compiler generated { T instance = AllocateZeroed<T>(); instance.field1 = ABC; // field initializers instance.field2 = DEF; // field initializers ... instance.constructor(); // user-written constructor chain return instance; }
if(something == true)to me. Note that, just because someone wrote it, doesn't necessarily mean that it's good.