java - 在构造函数中创建 XML
问题描述
所以我正在研究一个现有的项目,我正在尝试重构它。它使用 XML,当前代码如下所示:
有一个类用于生成 XML:
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import hr.pbz.jhex.engine.xml.XmlMarshaller;
@XmlRootElement(name = "root")
public class MyXmlClass extends XmlMarshaller{
private String string1;
private String string2;
public String getString1() {
return string1;
}
@XmlAttribute
public void setString1(String string1) {
this.string1 = string1;
}
public String getString2() {
return string2;
}
@XmlAttribute
public void setString2(String string2) {
this.string2 = string2;
}
}
它在 Main.java 中使用
MyXmlClass myXml = new MyXmlClass()
myXml.setString1("foo");
myXml.SetString2("bar");
这就像它应该的那样工作,并产生了良好的结果。
问题是,在我的真实代码中,字段远不止string1、string2,而且仅仅设置XML会使用很多代码行。
我的问题是,我可以在 MyXmlClass 中使用构造函数吗?就像是:
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import hr.pbz.jhex.engine.xml.XmlMarshaller;
@XmlRootElement(name = "root")
public class MyXmlClass extends XmlMarshaller{
private String string1;
private String string2;
public MyXmlClass() { //doesn't work without the default noargs constructor
}
public MyXmlClass(String string1, String string2) {
this.string1 = string1;
this.string2 = string2;
}
public String getString1() {
return string1;
}
@XmlAttribute
public void setString1(String string1) {
this.string1 = string1;
}
public String getString2() {
return string2;
}
@XmlAttribute
public void setString2(String string2) {
this.string2 = string2;
}
}
然后在 Main.java 中使用它,例如:
MyXmlClass myXml = new MyXmlClass("foo", "bar");
我已经尝试过了,它产生的结果好坏参半。有时它会像它应该的那样工作,而在其他地方则不然。
===编辑===
应该更清楚“不是那么多”部分,这里有一个例子。
假设现在我正在使用一个不仅仅是 2 个字段的 XmlClass,比如说 4 个。
我首先实例化它,提供 2 个参数,如下所示:
MyXmlClass myXml = new MyXmlClass("foo", "bar");
然后我决定使用 setter 设置第三个和第四个字段。
myXml.setElement3("set after instantiating");
myXml.setElement4("also after instantiating");
如果我按此顺序执行此操作,则 xml 不包含我设置调用 setElement4 的元素。如果我交换他们的位置,像这样:
myXml.setElement4("also after instantiating");
myXml.setElement3("set after instantiating");
它工作正常,所有元素都显示出来。我正在使用的类非常大,因此为此线程设置 MCVE 需要一些时间,但我会尝试一下。发布这个只是为了看看这是否有效,或者我正在做一些真正不应该做的骇人听闻的事情,这就是为什么程序在某些情况下表现得很奇怪。
===编辑===
使用构造函数以这种方式进行操作是否安全?谢谢。
解决方案
推荐阅读
- python - 为什么 Python 程序运行次数越多越快?
- swift - 如何在按钮上设置 IBAction 操作
- c++ - 如何将无效操作数修复为二进制表达式
- scala - 运行使用 nohup 编写在文件中的 spark 结构化流应用程序 scala 代码
- amazon-web-services - 自定义授权方 Lambda:允许 cognito 池和 IAM v4 签名用户
- javascript - react-native:如何正确格式化对象值
- python - 在不丢失样式的情况下将 html 转换为 docx
- swift - “__lldb_expr_18”是什么意思?
- c# - 如何解决 .NET Core 包版本冲突
- wordpress - 如何在 Elementor Page Builder 中添加单选图像控件