Java 有更好的办法吗?读取XML构造对象
这是我第一次尝试制作Java应用程序。最后,我将使用JavaFX合并图形 我的第一步是从XML文件导入类似配置的数据,以构建一个平铺对象的集合Java 有更好的办法吗?读取XML构造对象,java,xml,constructor,Java,Xml,Constructor,这是我第一次尝试制作Java应用程序。最后,我将使用JavaFX合并图形 我的第一步是从XML文件导入类似配置的数据,以构建一个平铺对象的集合 public Tile (String name, String imageName, int type, int up, int right, int down, int left,int feature){ this.Name = name; this.imageName = imageName; this.
public Tile (String name, String imageName, int type, int up, int right,
int down, int left,int feature){
this.Name = name;
this.imageName = imageName;
this.type = type;
this.sides.add(up);
this.sides.add(right);
this.sides.add(down);
this.sides.add(left);
this.feature = feature;
}
public static void ReadTileXML(){
try {
Element tileElement;
String tileName = null;
String tileImageName = null;
int tileCount = 0;
int tileType = 0;
int up = 0;
int right = 0;
int down = 0;
int left = 0;
int tileFeature = 0;
ArrayList<Integer> sidesImport = new ArrayList<>();
ArrayList<Tile> tileGallery = new ArrayList<>();
Element channelElement = ((Document) (new SAXBuilder()).build(new File("src/Resources/Tiles.xml"))).getRootElement();
List<Element> tileImport = channelElement.getChildren(channelElement.getName());
for (int i=0; i < tileImport.size(); i++) {
tileElement = (Element) tileImport.get(i);
List<Element> tileAttribs = tileElement.getChildren();
for (Element tileAttrib : tileAttribs) {
switch(tileElement.getName()) {
case "Name":
tileName = tileAttrib.getText();
break;
case "imageName":
tileImageName = tileAttrib.getText();
break;
case "type":
tileType = Integer.parseInt(tileAttrib.getText());
break;
case "Count":
tileCount = Integer.parseInt(tileAttrib.getText());
break;
case "Sides":
sidesImport.clear();
List<Element> tileSides = tileElement.getChildren(tileElement.getName());
for (Element tileSide : tileSides){
sidesImport.add(Integer.parseInt(tileSide.getText()));
}
break;
case "Feature":
tileFeature = Integer.parseInt(tileAttrib.getText());
break;
default:
System.out.println("Malformed TileXML, unknown Element.");
}
Tile tile = new Tile(tileName,tileImageName,tileType,sidesImport.get(0)
,sidesImport.get(1),sidesImport.get(2),sidesImport.get(3)
,tileFeature);
tileGallery.add(tile);
}
}
} catch (JDOMException ex) {
System.out.println(ex);
} catch (IOException ex) {
System.out.println(ex);
}
}
public Tile(字符串名称、字符串图像名称、int类型、int-up、int-right、,
整数向下,整数向左,整数特征){
this.Name=Name;
this.imageName=imageName;
this.type=type;
这个。两边。加起来;
本.边.加(右);
这个.边.加(下);
此。侧面。添加(左);
这个特征=特征;
}
公共静态void ReadTileXML(){
试一试{
元素tileElement;
字符串tileName=null;
字符串tileImageName=null;
int tileCount=0;
int-tileType=0;
int up=0;
int right=0;
int-down=0;
int左=0;
int-tileFeature=0;
ArrayList sidesImport=新的ArrayList();
ArrayList tileGallery=新的ArrayList();
元素channelElement=((文档)(新SAXBuilder()).build(新文件(“src/Resources/Tiles.xml”)).getRootElement();
List tileImport=channelElement.getChildren(channelElement.getName());
对于(int i=0;i
我觉得我正在使用的过程有点繁重。有没有更好的方法通过读取XML来创建对象?设置对象的所有变量,然后将其传递给构造函数,这看起来很混乱。您想要使用它,它允许从xml文本反序列化为Java对象。基本上,您可以使用一个带有默认构造函数的常规JavaBean,添加注释将属性绑定到XM元素,并让解析器完成解析
一种流行的替代方案是,它提供了类似的功能,并且更易于使用,允许将xml文本反序列化为Java对象。基本上,您可以使用一个带有默认构造函数的常规JavaBean,添加注释将属性绑定到XM元素,并让解析器完成解析
一个流行的替代方案是,它提供了更易于使用的类似功能我是否应该将tileGallery ArrayList返回到将调用ReadTileXML方法的方法?我是否应该将tileGallery ArrayList返回到将调用ReadTileXML方法的方法?为了更好的衡量:JAXB(带注释)很好的衡量标准是:JAXB(带注释)很好,很容易。