Xstream no-args构造函数错误

lui*_*.ln 14 java constructor xstream

当它试图创建'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
Run Code Online (Sandbox Code Playgroud)

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

谢谢

小智 18

3解决方案:

  1. 提供一个无参数构造函数(显而易见)
  2. 使此对象实现Serializable.
  3. 升级到xstream 1.4.4*

我一直使用解决方案#2.

*我验证1.2.2不起作用,1.4.4确实有效,没有尝试过任何版本


Ham*_*amy 5

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

答案很长:Java会自动执行一些操作,并且遇到了边缘情况(请参见此处).内部类(大多数情况下)不可能有一个无参数构造函数.Java总是向内部/本地类中的任何构造函数添加一个参数,该参数是对父类的引用.这是使用的,因此您可以访问父项的所有变量/方法,但这意味着即使是一个no-args(在代码中)构造函数(当使用反射时,像xstream那样)也有一个参数.要修复,请将该类标记为静态,以便它不再需要继承所有父类方法/变量.