У меня есть Singleton Logger
класс.Использование Singleton in Constructor
public class Logger {
public static Logger INSTANCE = new Logger();
private Logger() {
...
}
}
Я хочу, чтобы мой конструктор создал новый экземпляр. Так что мой код выглядит следующим образом:
public class MyClass {
public MyClass() {
Logger.INSTANCE.log("MyClass created");
...
}
}
мне интересно, если это может нарушить статические экземпляры из MyClass
. Например, если у меня есть:
public class MyOtherClass {
private static MyClass myClass = new MyClass();
...
}
Я боюсь, что это может вызвать проблемы из-за неопределенного порядка инициализации статических переменных. Поэтому, если myClass
инициализирован до Logger.INSTANCE
, то произойдет сбой конструкции myClass
. Есть ли какой-то механизм для предотвращения этого или использует статические переменные в конструкторе по своей сути опасно? Есть ли способ предотвратить создание пользователями статических экземпляров MyClass
в таком случае?
Если вы должны использовать одноэлементный шаблон, сам экземпляр не должен быть доступен. Он должен был обернуть метод. – christopher
Обратите внимание, что в этом случае ваша переменная экземпляра должна быть окончательной и частной или защищенной. – chrylis