6

ArrayListMultiMapインターフェイスを実装するこの API を見ていSerializableます。これは、このオブジェクトをシリアル化できるということですか? すべての Multimap オブジェクトはシリアル化されていますか?

4

2 に答える 2

9

の意味Serializableは常に同じです。オブジェクトがシリアライズ可能でない場合、シリアライズすることはできません。もしそうなら、それはうまくいくかもしれません.

ArrayList<String>例としてArrayList.class、リストの各メンバーがシリアライズ可能であるため、確実にシリアライズできます。シリアル化しようとしている OTOHは機能する場合とArrayList<Object>機能しない場合があります。含まれているすべてのオブジェクトが文字列などの場合、機能します。いずれかのメンバーがシリアライズ可能でない場合、例外が発生します。

このオブジェクトをシリアル化できるということですか?

すべてのキーと値がシリアライズ可能であれば、可能です。

すべての multiMap オブジェクトはシリアライズ可能ですか?

いいえ、インターフェイスMultimapは拡張Serializableされないため、シリアル化できない実装が存在する可能性があります。実際、そのようなインスタンスは、例を介して取得できますMultimaps.filterEntries

于 2012-12-13T16:19:22.513 に答える
0

ArrayListMultimapHashMultimapはありますがSerializableCollectionビュー(asMap()たとえば)はそうではありません。

この問題はここで答えられます:

によって返されたマップを使用するにはasMap()、新しいマップを再作成し、マルチマップCollectionビューを他のコレクション (たとえば a Set) にラップして、新しいマップを作成しSerializableます。

Multimap<MyClass, MyOtherClass> myMultiMap = HashMultimap.create();
// ... build your multimap
Map<MyClass, Set<MyOtherClass>> map = myMultiMap.asMap().entrySet()
    .stream()
    .collect(Collectors.toMap( 
        Map.Entry::getKey, 
        (entry) -> ImmutableSet.copyOf(entry.getValue()) 
    ));

または Java 7 準拠のコード:

Multimap<MyClass, MyOtherClass> myMultiMap = HashMultimap.create();
// ... build your multimap
Map<MyClass, Set<MyOtherClass>> map = Maps.newHashMap();
for (Map.Entry<MyClass, Collection<MyOtherClass>> entry : 
myMultiMap.asMap().entrySet()) {
    map.put(entry.getKey(), ImmutableSet.copyOf(entry.getValue()));
}
于 2017-05-03T16:21:10.140 に答える