public class Dog extends Exception {
public static final Dog INSTANCE = new Dog();
private Dog() {
}
public String toString() {
return "Woof";
}
}
Но он ошибался. Во всём. Сможете ли вы создать второй экземпляр класса
Dog
не используя reflection?Ну тут надо сообразить, что класс
Exception
является Serializable
. А дальше всё просто. Эта проблема и её решение были описаны в книге Effective Java: singleton, который имплементирует интерфейс Serializable
должен определять readResolve
метод, который возвращает единственный экземпляр:public class Dog extends Exception {
public static final Dog INSTANCE = new Dog();
private Dog() {
}
private Object readResolve() {
return INSTANCE;
}
public String toString() {
return "Woof";
}
}
А иначе при десериализации вы получите другой экземпляр.
Комментариев нет:
Отправить комментарий