Immutable Type: public final fields vs. getter
I would do what you believe is simplest and clearest. If you have a data value class which is only used by a restricted number of classes. esp a package local class. then I would avoid getter/setters and use package local or public fields.
If you have a class which you expect other modules/developers to use, following a getter/setter model may be a safer approach in the long run.
The problem is the uniform access principle. You may later need to modify foo
so that it's obtained through a method instead of being fixed, and if you exposed the field instead of a getter, you'll need to break your API.