Java e Reflection

Como que a biblioteca XStream consegue gerar uma classe via reflection sem passar pelo construtor ??

Não ressuscite tópicos sem necessidade. Sua dúvida caberia em um tópico à parte. Principalmente porque essa dúvida não é respondida usando reflexão e, sim, serialização.

No processo de desserialização, o construtor da classe não é chamado (justamente porque não tem como saber qual construtor foi usado pra instanciar o objeto serializado nem os parâmetros utilizados).

Existem algumas regras pois o processo de serialização e desserialização não é tão simples assim. Você pode ver mais detalhes aqui:

https://docs.oracle.com/javase/7/docs/platform/serialization/spec/input.html

  • Estou partindo do princípio de que gerar uma classe via reflection seria, na verdade, instanciar uma classe, já que gerar uma classe realmente não passa pelo construtor dela

Não ressuscite tópicos sem necessidade. Sua dúvida caberia em um tópico à parte. Principalmente porque essa dúvida não é respondida usando reflexão e, sim, serialização.

No processo de desserialização, o construtor da classe não é chamado (justamente porque não tem como saber qual construtor foi usado pra instanciar o objeto serializado nem os parâmetros utilizados).

Existem algumas regras pois o processo de serialização e desserialização não é tão simples assim. Você pode ver mais detalhes aqui:

https://docs.oracle.com/javase/7/docs/platform/serialization/spec/input.html

  • Estou partindo do princípio de que gerar uma classe via reflection seria, na verdade, instanciar uma classe, já que gerar uma classe realmente não passa pelo construtor dela[/quote]

Me desculpe pelo ressuscitamento do tópico é que sou novo nesse negócio de fórum , mas já que você disse sobre Serialização , eu conheço já como serializar o objeto , mas ai a classe tem que implementar a interface Serializable , e a biblioteca do XStream consegue fazer isso com qualquer classe mesmo que ela não implemente a interface Serializable , porque esse trecho aqui olha :

stream.writeLong(ObjectStreamClass.lookupAny(type).getSerialVersionUID());

Ele não funciona caso eu não implemente essa interface na classe Type,