Ваш пример работает нормально, поэтому он неполон.
Возможно, в вашем реальном приложении у вас есть цикл зависимости между вашими классами, так что getSingleton()
вызывается до завершения инициализации Someclass
, что-то вроде следующего, но с участием нескольких классов:
public class Foo {
private static Foo INSTANCE = new Foo(); // Prints null
private static String s = "foo";
public Foo() {
System.out.println(s);
}
}
Это особенно вероятно, если у вас реализовано несколько взаимозависимых синглетонов.
Попробуйте найти и устранить эти циклы.
Кроме того, возможно, было бы лучше использовать какой-либо шаблон DI или шаблон Service Locator, а не реализовывать поведение синглтона вручную.