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 doc に次のように記載されているためです。

暗黙の永続性

Boolean、Byte、Character、Integer、Long、Object、Short、String、Vector、Hashtable など、暗黙的に永続化できるクラスがあることに注意してください。

また、オブジェクトを永続化すると、オブジェクトが参照する永続化可能なオブジェクトも永続化されることに注意してください。

しかし、他のデータ構造はどうでしょうか? たとえば、上記で使用したベクターの代わりに、キー: 文字列と値: MyItems を持つハッシュテーブルが必要です。オブジェクトがどれほど複雑であっても、永続化して MyItem コンテンツが実際に保存されるようにするにはどうすればよいですか?

IntHashtableはPersistable としてリストされているのに、Hashtable はそうではないのはなぜですか?

ありがとうございました!アレックス

4

1 に答える 1

4

暗黙の永続性に関する部分を書いたときに Hashtable を自分でリストしましたが、それが永続可能であることをさらに確認したいことがわかりません。いずれにせよ、MyItems を Persistable にしたい場合はpublic class MyItems implements Persistable、宣言どおりに実行してください。それが機能する方法は、何かを Persistable にしたい場合、コピーを保持するもの (つまり、メンバー変数) も Persistable である必要があるということです。したがって、MyItems が文字列、整数のベクトル、および MyItem を格納する必要がある場合は、MyItem も Persistable であることを確認する必要があります。

これにより、保存できるものにいくつかの制限が生じます。たとえば、メンバー変数の 1 つがビットマップの場合、Persistable MyItems を作成することはできません。また、メソッド内で Persistable でないオブジェクトを使用しても、クラス自体を Persistable にすることができなくなるわけではないことに注意してください。

于 2011-05-26T13:15:40.610 に答える