You're right, as it stands NutritionFacts is useless because doesn't expose any of its information. I'm guessing that's because it was simplified for the book's example, and the intent is to add more functionality, or at least field accessors where it can be passed to an algorithm to do things like calculate how much insulin should be taken. The point is, NutritionFacts has so many inputs (servingSize, servings, calories, carbs, fat, sodium) before it's state is ready, and some are optional, that creating constructors for all the possible combinations would be a trainwreck (and in this case impossible for all combinations because of int ambiguity). Maybe in the future a calculation must be ran before NutritionFacts is ready to be used. With this pattern, you don't get a NutritionFacts object without calling the build() method, which makes things a bit less error-prone.