[RESOLVIDO] Cast de Objetos

Boa tarde pessoal.

Estou com uma dúvida sobre Cast.

No seguinte cenário de exemplo (na prática preciso disso pra orçamentos, vendas, pedidos e etc):

Uma classe Pai:

public class Pai {
	
	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

}

Uma classe Filho1:

public class Filho1 extends Pai {

}

Uma classe Filho2:

public class Filho2 extends Pai {

}

Reparem que Filho1 e Filho2 não tem diferenças… apenas herdam o atributo da superclasse…

Eu precisava fazer o seguinte:

public static void main(String[] args) throws CloneNotSupportedException {

		Filho1 filho1 = new Filho1();
		
		filho1.setNome("Fulano");
		
		Filho2 filho2 = (Filho2) filho1;

	}

mas não consigo… existe alguma maneira de chegar a este resultado?

Abraços

Filho2 filho2 = new Filho2();

filho2.setNome(filho1.getNome());

E repetir isso para todos os campos.

Algo que pode te ajudar a fazer essas cópias é o BeanUtils.copyProperties(filho2, filho1) da biblioteca Apache Commons BeanUtils

Edit: Lembrando de outro projeto que fiz parecido com o teu problema, mas usando Beans de terceiros, preferi usar o )]BeanUtils do Spring Framework, que pelo menos tem uma opção a mais de ignorar algumas propriedades.

E falando em clones, talvez você encontre o problema de Deep Cloning.

A minha solução de deep cloning foi usar o copyProperties do Spring e clonagem via construtor (Filho2 filho2 = new Filho2(filho1), para cada nó da árvore clonada.

[quote=Bruno Laturner][code]
Filho2 filho2 = new Filho2();

filho2.setNome(filho1.getNome());
[/code]
E repetir isso para todos os campos.

Algo que pode te ajudar a fazer essas cópias é o BeanUtils.copyProperties(filho2, filho1) da biblioteca Apache Commons BeanUtils[/quote]

Obrigado por responder Bruno!

Na verdade era justamente isto que estou querendo evitar: copiar atributo por atributo… pois serão dezenas…

Precisaria de algo que realmente fizesse um clone, mas trocando a classe…

Deu certo!

Li um pouco sobre JSON, fiz uns testes… e acabei criando uma maneira de fazer isto… obviamente que só funciona porque no meu caso os objetos serão identicos… só tenho q fazer isto porque eles tem necessariamente que estar em tabelas separadas…

segue o método que criei pra fazer isso:

private static Object castObjectJson(Object objeto, Class clazz) {

		Object retorno = null;

		ObjectMapper mapper = new ObjectMapper();

		mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

		try {

			String objectJson = mapper.writeValueAsString(objeto);

			retorno = mapper.readValue(objectJson, clazz);

		} catch (JsonGenerationException e) {
		} catch (JsonMappingException e) {
		} catch (IOException e) {
		}

		return retorno;

	}

e uso assim:

Filho1 filho1 = new Filho1();

filho1.setNome("RODRIGO");

Filho2 filho2 = (Filho2) castObjectJson(filho1, Filho2.class);

Obrigado pela atenção!

Editei a minha resposta acima. Eu usaria o copyProperties do Spring.

O teu método que vc postou é clonagem via serialização. O Commons Lang tem um SerializationUtils que faz isso. Mas não resolve o teu problema com classes diferentes.