Passagem de parâmetros através do construtor em tipo definido na classe genérica
9 respostas
J
Juliano.net
Tenho algumas classes que funcionam basicamente como modelo (POJO), mas além do construtor principal nestas classes, incluí uma sobrecarga do construtor para que ele receba um JSONObject e preencha os atributos da classe. Estas classes implementam uma interface que é informada na classe genérica, para que só classes que implementem esta interface sejam permitidas.
Além destas classes, criei uma classe genérica que irá servir como um cliente para o acesso a WebServices (REST) e com a resposta da requisição, consiga retornar um objeto da classe informada na instanciação da classe genérica, através de uma função getContentAsObject().
Porém não consigo instanciar a classe modelo definida na classe genérica e passar o conteúdo JSONObject que será transformado em modelo.
Tenho várias classes que implementam a interface IViewModel, além disso tenho uma classe genérica RestClient que aceita classes que implementem esta interface.
public class RestClient<T extends IViewModel>
{
public T getResponseAsObject() {
// ...
}
}
Preciso que ao executar a função getResponseAsObject, seja instanciada uma classe do tipo T e para isto seja passado um parâmetro, ficando algo do tipo:
Normalmente, para se chamar o construtor de T, deve-se passar T.class no construtor da classe genérica. Um exemplo (não sei se compila, provavelmente você terá de tratar alguma exceção) :
Mas neste caso a classe do tipo T não consegue receber parâmetros no seu construtor através do newInstance, certo?
Algo tipo:
T t = tKlass.newInstance(“MeuParametroString”);
E
entanglement
Uh, isso é um pouco mais complicado. Você sabe se essa classe tem apenas esse construtor (que recebe apenas uma string, e nada mais)? Se for isso, então podemos fazer algo como (obviamente você tem de pôr o tratamento de exceções ) :
Sim, sempre terá apenas um parâmetro. Na verdade é do tipo JSONObject, mas será apenas este sempre.
Vou testar no meu código.
Valeu!
E
entanglement
Dica: getConstructor é uma operação que leva algum tempo (porque ele precisa procurar, na lista de construtores de uma determinada classe, qual é o construtor correto).