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

Odpovedet emailem