As a C++ programmer but not a Java programmer, why is it reasonable for Java to consider nonsensical types (where constraints are violated) to be valid but just not instantiatable? Wouldn't it be better to reject the type entirely? Then you couldn't have a null object of the type since the type itself is ill-formed.