snake168 2010-03-24 11:44
浏览 174
已采纳

小弟最近用HashSet时无意看了下它的源码,发现一段奇怪的代码,不知是小弟所学不精还是java源码编写者别有深意呢

[code="java"]
map = (((HashSet)this) instanceof LinkedHashSet ?
new LinkedHashMap(capacity, loadFactor) :
new HashMap(capacity, loadFactor));
[/code]

这是HashSet中readObject的一段代码
LinkedHashSet是HashSet的子类,这里却在instanceof前对this用了强制转换
虽说LinkedHashSet用的也是这段代码,但这里的强制转换怎么看都觉得有点别扭似的

按小弟的理解,readObject应该是new了之后就使用,那this的类型也就该是new的类型吧?
又或者说是为了容错?为了编码的方便理解?

小弟学java还是新手,希望各位高手们不吝指教一下,谢谢

  • 写回答

3条回答 默认 最新

  • wanghaolovezlq 2010-03-24 12:50
    关注

    首先,看起来你还不清楚writeObject()和readObject()方法是用来实现对象的序列化和反序列化的

    这个this是指反序列化之后的引用

    反序列化是不会调用类的构造方法的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?