【问题标题】:Blackberry: how to make a data structure (for example Hashtable) persistable?黑莓:如何使数据结构(例如 Hashtable)可持久化?
【发布时间】:2011-05-26 12:45:01
【问题描述】:

我有这个运行良好的代码:

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。无论该对象有多复杂,我如何才能使其成为 Persistable 并确保真正存储 MyItem 内容?

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

谢谢! 亚历克斯

【问题讨论】:

标签: blackberry persistence hashtable persistent-storage


【解决方案1】:

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

这将限制您可以保存的内容。例如,如果其成员变量之一是位图,您将无法创建 Persistable MyItems。另请注意,在方法内使用非 Persistable 对象不会阻止您使类本身成为 Persistable。

【讨论】:

  • 是的,抱歉 - 我没有注意到文档中的 Hashtable。另外我认为 Vector 和 Hashtable 不能有“实现 Persistable”,因为这会改变它们的 Java-“指纹”。但是对于 net.rim.device.api.util.IntHashtable 没关系,因为它是 RIM 类。
  • @Alexander Farber,Vector 和 Hastable 已经是 Persistable。如果 Vector 中的对象没有实现 Persistable,应用程序将在 setContent() 上崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多