Usufruindo da orientação à objetos... polimorfismo.
Você precisará de duas bibliotecas que estou postando. Qualquer coisa dá um berro, vou estar aqui quase a tarde toda...
package br.com.gqferreira.exemplosGuj;
public abstract class FiguraGeometrica {
private int x;
private int y;
private int width;
private int height;
public FiguraGeometrica(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public FiguraGeometrica(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
package br.com.gqferreira.exemplosGuj;
public class CuboVerde extends FiguraGeometrica{
public CuboVerde(int x, int y) {
super(x, y);
System.out.println("Voce acabou de criar um cubo verde");
}
}
package br.com.gqferreira.exemplosGuj;
public class FormaEstatica extends FiguraGeometrica{
public FormaEstatica(int x, int y, int width, int height) {
super(x, y, width, height);
System.out.println("Voce acabou de criar uma forma estatica");
}
}
package br.com.gqferreira.exemplosGuj;
import java.util.List;
public class Game {
private List<FiguraGeometrica> figuras;
public Game(List<FiguraGeometrica> figuras) {
super();
this.figuras = figuras;
}
public List<FiguraGeometrica> getFiguras() {
return figuras;
}
public void setFiguras(List<FiguraGeometrica> figuras) {
this.figuras = figuras;
}
}
package br.com.gqferreira.exemplosGuj;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
public class InstanciarClassePeloNome {
public static void main(String[] args) throws FileNotFoundException {
/**
* Instancio a biblioteca que ira fazer o parser xml<>object
*/
XStream xStream = new XStream();
/**
* Para mapear as classes e nao precisar colocar na tag algo como: <br.com.gqferreira.exemplosGuj.CuboVerde>
*/
xStream.alias("FormaEstatica", FormaEstatica.class);
xStream.alias("CuboVerde", CuboVerde.class);
xStream.alias("Game", Game.class);
/**
* Crio uma lista de figuras
*/
List<FiguraGeometrica> figuras = new ArrayList<FiguraGeometrica>();
/**
*Adiciono duas figuras
*/
figuras.add(new FormaEstatica(10, 10, 500, 500));
figuras.add(new CuboVerde(10, 10));
/**
* Coloco as figuras dentro de 'game'
*/
Game game = new Game(figuras);
/**
* Faco o 'game' virar um xml
*/
xStream.toXML(game, new FileOutputStream(new File("/home/gustavo/Game.xml")));
/**
* O contrario, faco o xml virar o 'game'
*/
Game novoGame = (Game) xStream.fromXML(new FileReader(new File("/home/gustavo/Game.xml")));
/**
* Mostro algumas informacoes do conteudo de 'game'
*/
System.out.println("Qual a segunda figura do 'game'?:");
System.out.println(novoGame.getFiguras().get(1).getClass());
System.out.println("Qual o 'x' dessa figura?: ");
System.out.println(novoGame.getFiguras().get(1).getX());
}
}