Map<String, Serializable> 是什么意思?

5
有人能解释一下 Map<String, Serializable> 是什么意思吗?我知道 Map 必须有键值对,我习惯于看到 <String, String><Integer, whatever>,但我从未见过值为 Serializable 类型的情况。我也知道 Serializable 将对象写入磁盘/网络的字节流中。但当我们使用 Map<String, Serializable> 时,这又是如何加起来的呢?它归结为什么?
我可以将任何对象放入类型为 Serializable 的值中吗?还是必须是某些特殊的对象或其他东西?能有人解释一下吗?

你的问题令人困惑。你知道 java 接口是什么吗? - Denys Séguret
这只是一个Map,它将String键映射到实现Serializable接口的值。 - Andreas
1
这不是一个好问题。你能否可视化类型为Map<String,List>的地图,比如某个单词的所有同义词?Map,String, Serializable>也没有什么不同。ListSerializable都是接口。 - vsnyc
这是一个足够好的问题,可以作为谷歌对Map<String, Serializable>的答案。感谢你的提问。 - caduceus
4个回答

16

我知道Serializable是将对象写入磁盘/网络的字节流的过程。但当我们使用Map<String,Serializable>时,这一切是如何添加起来的呢?

Serializable是Java接口:

API中:

  • 实现 java.io.Serializable 接口的类启用其类的可序列化性。
  • 未实现此接口的类将无法序列化其任何状态或反序列化。
  • 序列化接口没有方法或字段,仅用于标识可序列化的语义。

我可以将任何对象放入类型为Serializable的值中吗?还是它必须是某些特殊对象或其他东西?

  • 可序列化类的所有子类型本身也是可序列化的。

有人可以解释一下Map<String, Serializable>是什么意思吗?

它意味着你会有一个String键和一个值,该值必须是实现Serializable的对象。

例如:

// valid object for the map
class Bar implements Serializable {
    private static final long serialVersionUID = 1L;

    // class stuff
}

// not a candidate
class Foo {
    // class stuff
}

接下来:

Map<String, Serializable> myMap = new HashMap<String, Serializable>();
Bar bar = new Bar();
map.put("BAR", bar); // this is ok
Foo foo = new Foo();
map.put("FOO", foo); 
// The method put(String, Serializable) in the type HashMap<String,Serializable> 
// is not applicable for the arguments (String, Foo)

2

字符串是键,可序列化对象是值。它是一个可以使用给定的SerDe序列化并在整个集群中传输的对象。


2

Serializable是一个接口。

这意味着,映射的值是实现了Serializable接口的类。

这也意味着,get()方法返回的对象的静态类型将是可序列化的。


0

Map是一个称为模板类(或Java中使用的通用类型)的东西,请参见this。 Map类在其模板中采用2个类,这些类可以是任何东西,只要它们符合一些先决条件。 这里的Key只是一个字符串,而Value是实现Serializable的类。 如果地图类仅支持(基本)字符串类,则该地图类将不会非常动态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接