java.util.hashMap中的init方法

时间:2015-01-20 07:16:17

标签: java hashmap

当我浏览java.util.HashMap的源代码时,我发现了init的声明。

子类的初始化挂钩。在clone初始化之后但在插入任何条目之前,在所有构造函数和伪构造函数(readObjectHashMap)中调用此方法。 (如果没有这种方法,readObject将需要明确的子类知识。)

void init() {
}

我找到了一个相关的问题In Java, is there a legitimate reason to call a non-final method from a class constructor?

但是我仍然无法理解init的目的是什么以及为什么readObject需要明确的子类知识?任何人都可以用一个例子来解释

1 个答案:

答案 0 :(得分:3)

正如评论所说,它是子类的初始化钩子。每个子类都可以适当地重写init()以执行在每种情况下都需要的初始化,没有必须提供readObject的另一个实现来进行反序列化并重新实现clone()

例如,在LinkedHashMap中,重写init()方法以设置链接列表。如果init()不可用,请考虑在反序列化时会发生什么。