How about a compromise? The fields freshVariable and freshConstant and name become blank final variables, and so each constructor has to initialize them.