Obter Tipo de campo em Objeto com generics

2 respostas
L

Bom dia a todos,

Estou desenvolvendo um serializador json usando o gson 2.5
Tenho minha classe Serializador que contem o métodos public String getJson(Object objeto){…}
e um método privado responsável por obter o tipo de cada atributo da classe,

private Class<?> getTipoAtual(Field campo) {

Type tipoGenerico = campo.getGenericType();

ParameterizedType tipo= (ParameterizedType) tipoGenerico;

return (Class<?>) tipoGenerico.getActualTypeArguments()[0];	

}

Agora estou tendo problemas para serializar classes com generics, pois ele retorna como tipo T e não o tipo que foi passado como parametro.

public class RespostaJson{
private Boolean sucesso;

private String mensagem;
	
	private T obj;

	public Boolean getSucesso() {
		return sucesso;
	}

	public void setSucesso(Boolean sucesso) {
		this.sucesso = sucesso;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public T getObj() {
		return obj;
	}

	public void setObj(T obj) {
		this.obj = obj;
	}
}

public class Pessoa{
	
	private Integer id;
	private String nome;
	
	private Telefone telefone;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Telefone getTelefone() {
		return telefone;
	}
	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}
}

public class PessoaFisica extends Pessoa{
	private LocalDate dataNascimento;

	public LocalDate getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(LocalDate dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
}

2 Respostas

igomes

Isso é um exemplo usando jackson, também para json

public static T jsonToPojo(String json, Class classe) throws IOException, JsonParseException, JsonMappingException {
T t = new ObjectMapper().readValue(json, classe);
return t;
}

o retorno não é T, é a classe que é passada como parametro.

L

Obrigado pela resposta porem de dentro da própria classe consigo normalmente o problema esta em capturar o tipo de T de outro classe já que esse foi passado para como um tipo Object

Criado 4 de fevereiro de 2016
Ultima resposta 4 de fev. de 2016
Respostas 2
Participantes 2