Re: Initializing Singletons
On Thu, 8 May 2008, Jason Cavett wrote:
I'm curious - is it possible (and if so, how) to initialize a Singleton
class when the class used for initialization must also get an instance
of the Singleton class?
The way you want to do it, no.
Here's a pseudocode example to make that more clear...
class SingletonClass {
private SingletonClass() {
ConfigFileReader reader = new ConfigFileReader();
reader.read();
}
// other singleton stuff
}
class ConfigFileReader {
public ConfigFileReader() {
// do stuff
}
public void read() {
// read in the config file and get the appropriate information
SingletonClass.getInstance().setValues(...);
}
}
I don't *think* what I want to do is possible. But, if it is, I'm not
sure how to do it. Any insight would be appreciated.
Are you writing ConfigFileReader? If so, make read take a SingletonClass
as a parameter:
class ConfigFileReader {
public void read(SingletonClass singleton) {
singleton.setValues(...) ;
}
}
That's probably the easiest way.
Another thing you could do would be to initialise the singleton instance a
bit differently, so that getInstance becomes usable (FSVO 'usable') before
the constructor finishes:
class SingletonClass {
private static SingletonClass INSTANCE ;
static {
new SingletonClass() ;
}
public SingletonClass()
{
INSTANCE = this ;
ConfigFileReader reader = new ConfigFileReader() ;
reader.read() ;
}
}
But that's fairly sick. It also means that you're putting an uninitialised
object in the INSTANCE field, which is potentially risky.
tom
--
Got a revolution behind my eyes - We got to get up and organise