gpt4 book ai didi

java - 为什么 XMLEncoder 会丢失某个属性?

转载 作者:行者123 更新时间:2023-12-01 23:39:41 25 4
gpt4 key购买 nike

我有这个java类

class Go {

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

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

最佳答案

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

JavaBeans 表示,如果它找到一对访问器 void setX(Y)Y getX(),则 X 被识别为Y 类型的读写属性。它特定于类型 Y,在两种情况下都是相同的。 (符号是我的,我只是想以具体的方式进行说明。)如果缺少 getX() 方法,则 X 是只写属性。如果缺少 setX(Y),则 X 是只读属性。

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

在您的代码中,默认自省(introspection)会忽略 setSha1(),因为它称为 set 但不带任何参数。

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

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

关于java - 为什么 XMLEncoder 会丢失某个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18155440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com