Java 为什么XMLEncoder会丢失属性?

Java 为什么XMLEncoder会丢失属性?,java,serialization,Java,Serialization,我有一个java类 class Go { public boolean isSha1() { return true; } public String getSha1() { return this.sha1; } public String setSha1(String sha1) { } ... } 当我尝试使用java的java.beans.xmlcoder对其进行编码时,它会输出除sha1之外的所有属性。就像跳过了一个属性 这可能是JDK中

我有一个java类

class Go {

  public boolean isSha1() {
    return true;
  }
  public String getSha1() {
    return this.sha1;
  }
  public String setSha1(String sha1) {
  }
  ...
}

当我尝试使用java的java.beans.xmlcoder对其进行编码时,它会输出除sha1之外的所有属性。就像跳过了一个属性

这可能是JDK中的一个bug,也可能不是(未知),但目前的修复/解决方法是将isSha1重命名为其他(任何)东西。奇怪。

这可能是JDK中的一个bug,也可能不是(未知),但目前的修复/解决方法是将isSha1重命名为其他(任何)东西。奇怪。

您没有遵循JavaBeans规范,所以不要期望它处理您的任意命名

JavaBeans说,如果它找到一对访问器,
void setX(Y)
Y getX()
X
被标识为
Y
类型的读写属性。这是关于类型的具体说明,
Y
,在这两种情况下都是相同的。(符号是我的,我只是想用具体的方式来说明。)如果缺少
getX()
方法,
X
是一个只写属性。如果缺少
setX(Y)
X
是只读属性

类型为
boolean
的属性具有特殊处理。如果有一个方法
boolean isX()
,它将用于对属性的读取访问。如果有
boolean getX()
方法也可以,但它不会被使用

在代码中,
setSha1()
默认情况下被忽略,因为它被称为
set
,但不带参数

但是,您给了
isSha1()
getSha1()
不同的返回类型,因此内省者无法判断sha1属性的类型。此处的行为未由规范定义。您可能可以通过提供显式bean描述符来解决这个问题,但是没有人这样做


所以,结果是,不要这样做。遵循规范中给出的约定。

您没有遵循JavaBeans规范,因此不要期望它处理您的任意命名

JavaBeans说,如果它找到一对访问器,
void setX(Y)
Y getX()
X
被标识为
Y
类型的读写属性。这是关于类型的具体说明,
Y
,在这两种情况下都是相同的。(符号是我的,我只是想用具体的方式来说明。)如果缺少
getX()
方法,
X
是一个只写属性。如果缺少
setX(Y)
X
是只读属性

类型为
boolean
的属性具有特殊处理。如果有一个方法
boolean isX()
,它将用于对属性的读取访问。如果有
boolean getX()
方法也可以,但它不会被使用

在代码中,
setSha1()
默认情况下被忽略,因为它被称为
set
,但不带参数

但是,您给了
isSha1()
getSha1()
不同的返回类型,因此内省者无法判断sha1属性的类型。此处的行为未由规范定义。您可能可以通过提供显式bean描述符来解决这个问题,但是没有人这样做


所以,结果是,不要这样做。遵循规范中给出的约定。

“将isSha1返回到其他(任何)东西”——这没有任何意义。你能把这句话改一下吗?“把isSha1换成别的东西(任何东西)”——这没有任何意义。你能换一种说法吗?我想/希望给出一个isSha1,getSha1和setSha1,最后两个同意,处理这个案子足够聪明,但遗憾的是,显然不是这样……我想/希望给出一个isSha1,getSha1和setSha1,最后两个同意,处理这个案子足够聪明,但遗憾的是,显然不是这样。。。