我有这个java类
class Go {
public boolean isSha1() {
return true;
}
public String getSha1() {
return this.sha1;
}
public String setSha1(String sha1) {
}
...
}
当我尝试使用java的java.beans.XMLEncoder对其进行编码时,它会输出除 sha1之外的所有属性。这就像它正在跳过房产!
答案 0 :(得分:3)
您没有遵循JavaBeans规范,因此不要指望它处理您的任意命名。
JavaBeans说,如果找到一对访问者void setX(Y)
和Y getX()
,则X
被识别为类型Y
的读写属性。它的具体类型Y
在两种情况下都是相同的。 (符号是我的,我只是想以具体的方式说明。)如果缺少getX()
方法,X
是一个只写属性。如果缺少setX(Y)
,则X
是只读属性。
类型为boolean
的属性需要特殊处理。如果有方法boolean isX()
,它将用于对属性的读访问。如果有boolean getX()
方法也可以,但不会被利用。
在您的代码中,默认内省会忽略setSha1()
,因为它被称为set
但不带参数。
但是,您已经给出了isSha1()
和getSha1()
不同的返回类型,因此introspector无法判断sha1属性的类型应该是什么。此处的行为未由规范定义。您可以通过提供显式的bean描述符来解决这个问题,但没有人这样做。
所以,结果是,不要这样做。遵循规范中给出的约定。
答案 1 :(得分:0)
这是JDK中的错误与否(未知)但是现在的修复/解决方法是将isSha1重命名为其他东西。奇