Каков наилучший способ создания одноэлементного класса, который может генерировать исключение?
Здесь у меня есть Singleton (с использованием метода Билла Пью, задокументированного в Wiki для Singleton).
private static class SingletonObjectFactoryHolder{
//1
private static final ObjectFactory INSTANCE = new ObjectFactory();
}
private ObjectFactory() throws Exception{
//2
//create the factory
}
public static ObjectFactory getInstance(){
//3
return SingletonObjectFactoryHolder.INSTANCE;
}
Если исключение выбрано в 2, я хотел бы распространить его на вызывающего. Однако я не могу исключить исключение из строки 1.
Итак, мой единственный вариант - вернуть нулевой объект, если объект singleton был создан неправильно?
Спасибо
P.S Я понимаю, что этот Singleton может сломаться, если он загружен через разные загрузчики классов или если он загружен рефлексивно, но он достаточно хорош для моей цели.
//UPDATE
Мне любопытно, не могу ли я изменить порядок моего дизайна, как показано ниже, для исключения исключений?
Кроме того, мне не нужна синхронизация (загрузчик классов гарантирует, что статический внутренний класс будет загружаться только один раз и только когда вызывается getInstance()). Таким образом, поточно-безопасный и лениво-экземпляр?
private static class SingletonObjectFactoryHolder{
//1
public static ObjectFactory getInstance() throws Exception{
return new ObjectFactory();
}
}
private ObjectFactory() throws Exception{
//2
//create the factory
}
public static ObjectFactory getInstance(){
//3
return SingletonObjectFactoryHolder.getInstance();
}
Еще раз спасибо.