Xstream 无参数构造函数错误

2022-09-03 18:19:40

当它尝试创建“Transacao”的实例时,我收到以下错误

`Error: Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor `

---- Debugging information ----

message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor 

cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException 

cause-message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor `

class : br.com.cbmp.ecommerce.resposta.Transacao 

required-type : br.com.cbmp.ecommerce.resposta.Transacao 

path : /transacao

我知道XStream 1.3.1和JDK7有一个错误,但我目前正在使用XStream 1.3.1和JDK6。任何想法为什么这个错误仍然发生?

谢谢


答案 1

3 种解决方案:

  1. 提供无参数构造函数(显而易见)
  2. 使此对象实现可序列化。
  3. 升级到 xstream 1.4.4*

我一直在使用解决方案#2。

*我验证了1.2.2不起作用,1.4.4工作,没有尝试任何版本


答案 2

简单的答案:所有内部类都必须标记为静态,或者您应该使用完整的,例如,而不是内部类。

长答案:Java会自动做一些事情,你遇到了一个边缘情况(见这里)。内部类(大多数情况下)不可能有一个无 args 构造函数。Java 始终向内部/本地类中的任何构造函数添加一个参数,并且该参数是对父类的引用。使用此方法是为了访问父级的所有变量/方法,但这意味着即使 no-args(在代码中)构造函数也具有(在使用反射时,如 xstream)一个参数。若要修复此问题,请将该类标记为静态,以便它不再需要继承所有父类方法/变量。