It depends entirely on how you’re going to use the object. Public fields aren’t inherently evil, it’s just bad to default everything to being public. For example the java.awt.Point class makes its x and y fields public, and they aren’t even final. Your example seems like a fine use of public fields, but then again you might not want to expose all of the internal fields of another immutable object. There is no catch-all rule.