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?
Static variables are created when the program starts and destroyed when the program stops. Visibility is similar to instance variables. However, most static variables are declared public since they must be available for users of the class. Default values are same as instance variables.
It makes sense to make a getter final if the POJO aimed to be immutable. final modifier will disable sub classes to override that method. You should only use it if you want this design, but it depends.
public makes it accessible across other classes. static makes it uniform value across all the class instances. final makes it non-modifiable value. So basically it's a "constant" value which is same across all the class instances and which cannot be modified.
private static final will be considered as constant and the constant can be accessed within this class only. Since, the keyword static included, the value will be constant for all the objects of the class. private final variable value will be like constant per object. You can refer the java.
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);
becomes someFunc(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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With