Zdravim,

odpoved je velmi jednoducha. Trida SingletonBase je jenom jedna at uz samostatna nebo jako superclass SingletonOne. Tzn ze

SingletonBase.instance je uplne to same jako SingletonOne.instance

Ponauceni zni: cokoliv static a dedicnost nejde dohromady :)

Honza

Stöhr Miroslav RNDr. Ph.D. napsal(a):
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


__________ Informace od NOD32 2283 (20070521) __________

Tato zprava byla proverena antivirovym systemem NOD32.
http://www.nod32.cz



Odpovedet emailem