Вы видите истинное доказательство того, что BlackBerry-программирование не является Java: тот факт, что интерфейс (Persistable) не наследуется.
В BlackBerry, если вы хотите сохранить класс, пометить его как Persistable недостаточно. Вся иерархия классов вверх должна быть устойчивой. В то же время, маркировка класса Persistable заставит вас думать, что подкласс унаследует постоянный, но это не так. Вам придется явно пометить подкласс как постоянный. (Я знаю, на данный момент вы, вероятно, думаете о том, что это ересь, злодеяние, ... ну, ну, в программировании BlackBerry полно таких хитрых вещей, как эта). Думайте о Persistable
как о интерфейсе маркера, который не наследуется.
В вашем случае у вас возникает ошибка Runtime, сообщающая, что для сохранения вашего экрана вам нужно будет MainScreen
реализовать Persistable
, чего, конечно, вы не можете, потому что у вас нет доступа к исходному коду. Даже если бы вы могли, есть еще одна оговорка: каждое поле, коллекция, контейнер на вашем экране также должны быть постоянными, чтобы вещь работала, иначе вы получите исключение. Так что вам совершенно не повезло, потому что ни Field
, ни его подклассы не реализуют Persistable
.
Но в любом случае, даже если бы это было возможно, не рекомендуется сохранять весь вид (с множеством вложенных объектов) просто для удобства. Вместо этого сохраните содержимое полей и состояние экрана в небольшом контейнере (реализует Persistable
) и восстановите экран при входе в приложение. Этот подход позволяет вам повторно использовать ваш контейнерный объект в случае добавления или удаления новых полей из GUI (в противном случае вам придется очищать память симулятора каждый раз, когда вы изменяете дизайн GUI, чтобы избежать ClassCastException
загрузки экрана из постоянства). Поскольку вы отделяете GUI от постоянства, он также позволяет вам выбрать, какие поля будут сохранены, а какие нет.