Vážení kolegové,
nějak jsem se zamotal s naprosto začátečnickým problémem, za což se stydím, ale
mohli by jste mi pomoci?
Mám následující tři classy:
public abstract class SigletonBase {
protected static SingletonBase instance;
private SingletonBase(){
// nejaka nepodstatna konfigurace
}
public abstract void methodA();
public void methodP(){
// nejaka spolecna implementace
}
}
public class SingletonOne extends SingletonBase {
static {
SingletonOne.instance = new SingletonOne();
}
private SingletonOne(){
// dalsi inicializace
}
public static SingletonOne getInstance(){
return (SingletonOne)instance;
}
protected void methodA(){
// implementace A
}
}
public class SingletonTwo extends SingletonBase {
static {
SingletonTwo.instance = new SingletonTwo();
}
private SingletonTwo(){
// dalsi inicializace, ale jina nez u SingletonOne
}
public static SingletonTwo getInstance(){
return (SingletonTwo)instance;
}
protected void methodA(){
// implementace A, ale jina nez u SingletonOne
}
}
A otazka: Je tento konstrukt bezpečný ve smyslu že mám zajištěno, že vždy
instance SingletonOne bude jiná než SingletonTwo? Jedna se mi o to, když mám
zděděné pole, které je static, jestli opravdu patří pouze classu, který
inicializuji, nikoliv classu jeho předka (který je v mém případě společný).
Koukal jsem se do java spec. a moudrý z toho nejsem, zkušební projekt po
kompilaci a spuštění mi řekne, že jsou to dvě oddělené instance (JDK 1.4.2),
ale pořád si nejsem jistý jestli nedělám naprosto školáckou chybu. Stačí
nasměrovat na patřičnou sekci v java spec.
Děkuji za objasnění.
Mirek