On 9/24/2011 8:09 PM, Roedy Green wrote:
> On Fri, 23 Sep 2011 17:40:20 -0700, Roedy Green
> <> wrote, quoted or indirectly quoted
> someone who said :
>
>> class A
>> {
>> static String VERSION = "1.0b";
>> }
>>
>> and
>> class B
>> {
>> static String VERSION = A.VERSION;
>> }
>
> restating, if the expression for A.VERSION cannot be evaluated an
> compile time, even final won't rescue you from having to include both
> A in your jar and indirectly loading A when you load B.
>
> So the rule of thumb use static final with values known at compile
> time to avoid needless class loading. But be aware, you must recompile
> B if the value of A.VERSION changes, or you will get the old value.
>
> Another rule of thumb may be, instead of cross linking classes with
> references to each others constants, refactor out the constants to a
> third class, and reference it or extend it.
>
> In a number of my projects I have a Config class where everything
> constant (possibly computed) needed to configure a program for a
> particular use are collected.
Rule of thumb: don't worry about the microseconds spend on class
initialization and spend the time on something relevant.
The requirement to recompile B if A is changed for constants
can be a much more severe problem than class init.
Arne
|