Blackberry: как сделать структуру данных (например, Hashtable) устойчивой? - PullRequest
1 голос
/ 26 мая 2011

У меня есть этот код, который хорошо работает:

static {
    myStore = PersistentStore.getPersistentObject(MY_LONG_KEY);
    myList = (Vector) myStore.getContents();
    if (_storedStations == null) {
            myList = new Vector(4);
            // prepopulate with fake data
            myList.addElement(new MyItem("Eins"));
            myList.addElement(new MyItem("Zwei"));
            myList.addElement(new MyItem("Drei"));
            myList.addElement(new MyItem("Vier"));
            myStore.setContents(myList);
    }
}

class MyItem implements Persistable {
    .....
}

вероятно, потому что документ PersistentObject говорит:

Неявное сопротивление

Обратите внимание, что некоторые классы неявно сохраняются: логический, байтный, символьный, целочисленный, длинный, объектный, короткий, строковый, векторный, хеш-таблица Также обратите внимание, что при сохранении объекта любой персистентный объект, на который он ссылается, также будет сохраняться.

Но как насчет других структур данных? Например, вместо вектора, использованного выше, я хотел бы иметь Hashtable с ключами: Строки и значения: MyItems. Как я могу сделать его постоянным и обеспечить, чтобы содержимое MyItem действительно сохранялось, независимо от сложности этого объекта?

А почему IntHashtable указан как Persistable, а Hashtable нет?

Спасибо! Alex

1 Ответ

4 голосов
/ 26 мая 2011

Вы перечислили Hashtable самостоятельно, когда писали часть о неявном постоянстве, не зная, что еще вы хотите проверить, что он является постоянным. В любом случае, если вы хотите, чтобы MyItems были персистентными, просто сделайте public class MyItems implements Persistable в качестве декларации. Это работает так: если вы хотите, чтобы что-то было Persistable, то все, что он хранит копию (то есть переменные-члены), также должно быть Persistable. Поэтому, если MyItems нужно хранить строку, вектор целых чисел и MyItem, необходимо убедиться, что MyItem также является персистентным.

Это даст вам некоторые ограничения на то, что вы можете сохранить. Например, вы не сможете создать персистентные MyItems, если одна из его переменных-членов является растровым изображением. Также обратите внимание, что использование непостоянного объекта внутри метода не помешает вам сделать сам класс сохраняемым.

...