Construtor + XML + setar própria instância

2 respostas
C

Galera,

Gostaria de saber se é possível alterar o proprio objeto em seu construtor. Segue o código para melhor entendimento.
public class Livro {
   
	// atributos, getters e setters

	public Livro() {
		try {
			this = (Livro) new XStream(new StaxDriver()).fromXML("xml de um Livro");
			// Penso em algo similar a isso. 
			// this = "outro objeto to tipo de sua classe"
		} catch (FileNotFoundException e) {
			throw new RuntimeException();
		}
	}
}
A idéia é a seguinte: carregar no construtor da classe Livro, um livro que está em um xml e atribuir a ele mesmo. [color=red]Sei que existem MILHARES de forma de se fazer isso e que dessa maneira (se isso funcionasse), todo new Livro() seria o mesmo livro e não faria sentido e etc etc etc.[/color] Foi apenas um exemplo rápido que pensei para exemplificar o que quero fazer. A razão dessa pergunta não é a utilidade, funcionalidade e etc etc... e sim a seguinte questão: é possível dentro do construtor de uma classes alterar seu proprio objeto.

2 Respostas

Alexandre_Saudate

Não.

E

Em vez de fazer isso (que não é permitido nem em C++, que ordinariamente deixa você fazer coisas impossíveis), você deve criar um método estático que retorna uma instância do objeto. Você pode deixar o construtor “protected” para evitar que o usuário de sua classe crie um “new Livro”, mas como estou vendo, você está usando o XStream, que precisa de um construtor público.

Exemplo (do que eu faria se não estivesse usando o XStream) :

public class X {
    public static X createInstance(String xml) {
        return (X) xstream.fromXML (xml);

    protected X () { // acho que o XStream requer que isto seja público, não protected. Mas...
       ...
    }
...
    private static XStream xstream = new XStream (new StaxDriver());
}
Criado 10 de janeiro de 2013
Ultima resposta 10 de jan. de 2013
Respostas 2
Participantes 3