繁体   English   中英

Double Brace初始化和序列化

Double Brace initialization and serialization

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我注意到一个奇怪的行为,当使用双括号初始化时,初始化的对象序列化失败:

queueVO.setUser(new UserVO() {{setIndex("admin");}});

将对象发送到JMS队列时导致以下错误:

javax.jms.JMSException: Failed to serialize object
at org.hornetq.jms.client.HornetQObjectMessage.setObject(HornetQObjectMessage.java:139)

否则一切运行正常

queueVO.setUser(new UserVO());
queueVO.getUser().setIndex("admin");

我知道这种语法糖会导致创建一个匿名类,但是我不明白为什么它破坏了可序列化的契约。

有人可以解释一下这里发生了什么吗?

1 个回复

创建的匿名类不是静态的 ,因此还有一个<SurroundingClass>.this ,该类也将被序列化,或者更糟糕的是,将在重新加载对象后变为null。

一种解决方案是让setter返回此值,而不是使其无效。 然后,您可以设置链结。

UserVO vo = new UserVO().setIndex("admin");
1 双支撑初始化

应该在以下代码中调用哪个构造函数,为什么? 如果我使用clang (来自trunk),则调用第二个。 如果第二个构造函数被注释掉,那么S{{}}仍然是有效的表达式,但是(我相信)在这种情况下调用默认构造的S{}实例中的move-constructor。 为什么转换构造函数在第 ...

2 用新的双括号初始化?

您好,只是想知道在C ++ 03中是否可以执行以下操作。 我已经尝试过了,但是对我不起作用。 我做到了,但是编译器警告我仅C ++ 11支持扩展的初始化器 使用new创建对象时,还有其他使用大括号初始化的方法吗? 不允许构造函数 ...

2013-02-05 07:07:53 2 240   c++
4 JRuby中的双括号初始化

我正在尝试JRuby,我试图找出如何使用Java的双括号初始化 。 但是,语法不是很明显。 为了简化这个例子,下面的Java代码将创建一个包含元素的列表: 这在JRuby中是否可行,如果是这样, 怎么样 ? ArrayList.new {{}}没有意义并导致错误: odd ...

6 双支架初始化 - 优势

我们知道我们可以通过使用双括号初始化来初始化java中的集合。 并对此进行了一些搜索,发现由于其性能问题,不建议使用它。 只是想知道,双支撑初始化有任何积极的一面或优势吗? ...

8 使用嵌套集合进行双括号初始化

我知道我可以使用双括号声明和初始化List : 但我想一个List的&lt;Map&lt;Object,Object&gt;&gt; : 如何使用嵌套集合的双括号初始化(参见(1))? 我的目标是在一行中声明和初始化数据结构。 另外我想知道使用双支撑初始化时是否存在某些缺 ...

9 Java中的Double Brace初始化

这个问题已经在这里有了答案: Java“双括号初始化”的效率? 15个答案 我在此网站http://howtodoinjava.com/2012/11/20/double-brace-initialization-in-java/中找到了开始收藏的新方法 我 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM