gpt4 book ai didi

java - 为什么 XmlEncoder 不将类的成员插入到 xml 文件中?

转载 作者:行者123 更新时间:2023-11-30 11:47:52 25 4
gpt4 key购买 nike

我正在尝试将一些数据放入 XML 文件中。这是代码:

@Test
public void TestProximities() {

// Create a proximity
ISpaceComponent solarSystem = Init.createSolarSystemProximities();
solarSystem.runTtest();

Path filePath = Paths.get("c:\\temp\\junk.bin");

File xmlFile = new File("c:\\temp\\");
boolean success = xmlFile.mkdirs();
if (!success && ! xmlFile.exists() ) {
// Directory creation failed
System.out.println("Failed to create a file: " + filePath);
}

try {
XMLEncoder fileXml = new XMLEncoder( new BufferedOutputStream( new FileOutputStream("c:\\temp\\junk.xml") ) );
fileXml.writeObject(solarSystem);
fileXml.flush();
fileXml.close();

} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());

}

}

初始化.createSolarSystemProximities():

public static ISpaceComposite createSolarSystemProximities() {

// Proximities
ISpaceComposite solarSystem = new SpaceComposite("The Solar System");
solarSystem.addComponent(new Star("Sol"));

ISpaceComposite MercuryProximity = new SpaceComposite("Mercury proximity");
MercuryProximity.addComponent(new Planet("Mercury"));
solarSystem.addComponent(MercuryProximity);

ISpaceComposite VenusProximity = new SpaceComposite("Venus proximity");
VenusProximity.addComponent(new Planet("Venus"));
solarSystem.addComponent(VenusProximity);

ISpaceComposite EarthProximity = new SpaceComposite("Earth proximity");
EarthProximity.addComponent(new Planet("The Earth"));
EarthProximity.addComponent(new Moon("The Moon"));
solarSystem.addComponent(EarthProximity);

ISpaceComposite MarsProximity = new SpaceComposite("Mars proximity");
MarsProximity.addComponent(new Planet("Mars"));
MarsProximity.addComponent(new Moon("Phobos"));
MarsProximity.addComponent(new Moon("Deimos"));
solarSystem.addComponent(MarsProximity);

return solarSystem;

}

空间复合类看起来像这样:

public class SpaceComposite extends SpaceComponent implements ISpaceComposite {
public static final long serialVersionUID = Data.serialVersionUID;
private ArrayList<ISpaceComponent> _components;
private int _currentMoonIndex;

}

“SpaceComposite”也有默认的无参数构造函数。但是唯一插入到文件中的是它的名称,它派生自“SpaceComponent”类

public abstract class SpaceComponent implements ISpaceComponent, Serializable{
private String _title;
public static final long serialVersionUID = Data.serialVersionUID;

// Default constructor
public SpaceComponent(){
_title = "";
}
}

我该如何解决这个问题?

最佳答案

XmlEncoder使用 JavaBean 约定捕获属性。它通过克隆对象图并记录创建克隆所需的步骤来工作。您希望在没有任何自定义的情况下与 XmlEncoder 一起使用的类需要遵循 JavaBeans 约定(getXYZ/setXYZ 属性或 isAbc/setAbc boolean 属性等)我的我猜你的类中唯一可用的属性是 Name,因此它是唯一被序列化的属性。

链接中的文章还解释了如何通过提供您自己的持久性委托(delegate)来自定义流程,但我会先尝试添加 getter/setter 以查看这是否足以使其正常工作。

关于java - 为什么 XmlEncoder 不将类的成员插入到 xml 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9093231/

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