In Java, it’s taught that variables should be kept private to enable better encapsulation, but what about static constants? This:
public static final int FOO = 5;
Would be equivalent in result to this:
private static final int FOO = 5;
...
public static getFoo() { return FOO; }
But which is better practice?
There’s one reason to not use a constant directly in your code.
Assume FOO may change later on (but still stay constant), say to
public static final int FOO = 10;. Shouldn’t break anything as long as nobody’s stupid enough to hardcode the value directly right?No. The Java compiler will inline constants such as Foo above into the calling code, i.e.
someFunc(FooClass.FOO);becomessomeFunc(5);. Now if you recompile your library but not the calling code you can end up in surprising situations. That’s avoided if you use a function – the JIT will still optimize it just fine, so no real performance hit there.