я сказал да
Не по умолчанию. Помимо реализации
java.io.Serializable
вам необходимо переопределить методыreadObject()
иwriteObject()
strike>readResolve()
, поскольку вы не можете сериализовать статические поля. Синглтон хранит свой экземпляр в статическом поле., но в каком сценарии мы должны сериализовать синглтон.
На самом деле ни один полезный сценарий реального мира не приходит в голову. Синглтон, как правило, не меняет состояния в течение своего времени жизни и не содержит состояния , которое вы хотели бы сохранить / восстановить. Если это так, то было уже неправильно считать его синглтоном.
Два реальных примера синглтон-паттерна в Java SE API - это
java.lang.Runtime#getRuntime()
иjava.awt.Desktop#getDesktop()
. Ни один из них не реализует сериализуемый. Это также не имеет никакого смысла , потому что они правильно возвращают правильный / желаемый / ожидаемый экземпляр при каждом вызове. Если вы сериализуете и десериализуетесь, вы можете получить несколько экземпляров. Если вы переключитесь из среды в это время, экземпляр может вообще не работать.И можно ли разработать класс, объект которого нельзя сериализовать.
Да. Только не позволяйте классу реализовывать интерфейс
java.io.Serializable
.
Обычно это происходит автоматически, когда вы открываете окно приложения.
Возможно, программа запуска приложения просто вызывает уже запущенный экземпляр, в этом случае он не будет автоматически обнаружен. Тогда вам понадобится следующий вызов:
import gtk
gtk.gdk.notify_startup_complete()
Обычно это происходит автоматически при вызове функции gtk.main ()
Ваше приложение может отказаться от уведомления о запуске, добавив
StartupNotify=false
в файл .desktop
вашего приложения.
Конечно, удобнее оставить его включенным и участвовать в уведомлении о запуске.