public String[] save() { ArrayList<String> lines = new ArrayList<String>(); Field[] fields = getClass().getDeclaredFields(); lines.add("<config>"); for (Field f : fields) { if (isConfigItem(f)) { Object obj; try { f.setAccessible(true); obj = f.get(this); } catch (IllegalAccessException e) { e.printStackTrace(); continue; } if (obj instanceof ConfigParser) { lines.add("<" + f.getName() + ">"); ConfigParser parser = (ConfigParser) obj; parser.save(lines); lines.add("</" + f.getName() + ">"); } else { String item_name = f.getName(); if (!Modifier.isTransient(f.getModifiers())) { lines.add("<" + item_name + ">" + obj.toString() + "</" + item_name + ">"); } } } } lines.add("</config>"); return lines.toArray(new String[lines.size()]); }