1

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

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 文档说:

隐式持久性

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

另请注意,当您持久化一个对象时,它所引用的任何可持久化对象也将被持久化。

但是其他数据结构呢?例如 - 而不是上面使用的向量 - 我想要一个带有键的哈希表:字符串和值:MyItems。无论该对象有多复杂,我如何才能使其成为 Persistable 并确保真正存储 MyItem 内容?

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

谢谢!亚历克斯

4

1 回答 1

4

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

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

于 2011-05-26T13:15:40.610 回答