Blackberry:如何使数据结构(例如Hashtable)可以持久化?

时间:2011-05-26 12:45:02

标签: blackberry persistence hashtable persistent-storage

我有这个代码运作良好:

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 {
    .....
}

可能是因为the PersistentObject doc说:

隐含持久性

请注意,某些类是隐式持久的:Boolean,Byte,Character,Integer,Long,Object,Short,String,Vector,Hashtable。

另请注意,当您持久保存对象时,它引用的任何可持久对象也将保持不变。

但是其他数据结构呢?例如 - 而不是上面使用的Vector - 我想要一个带有键的Hashtable:字符串和值:MyItems。我怎样才能使它可以持久化并确保MyItem内容真正存储,无论该对象有多复杂?

为什么IntHashtable被列为Persistable,但Hashtable不是?

谢谢! 亚历

1 个答案:

答案 0 :(得分:4)

当您编写有关隐式持久性的部分时,您自己列出了Hashtable,不确定您还想要确认它是否为Persistable。无论如何,如果你希望MyItems可以持久化,只需要public class MyItems implements Persistable作为声明。它的工作方式是,如果你想要一些东西是可持久的,那么它保留副本的东西(即它的成员变量)也需要是可持久的。因此,如果MyItems需要存储String,整数向量和MyItem,您需要确保MyItem也是可持久的。

这将为您节省一些限制。例如,如果其成员变量之一是Bitmap,您将无法创建Persistable MyItems。另请注意,在方法中使用非Persistable对象不会阻止您使类本身保持可持续性。