Java 有更好的办法吗?读取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.

这是我第一次尝试制作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.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(带注释)很好,很容易。