Java 为什么XMLEncoder会丢失属性?
我有一个java类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中
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,最后两个同意,处理这个案子足够聪明,但遗憾的是,显然不是这样。。。