Alterar tipo de retorno de um método interceptado em tempo de execução

Tendo como exemplo:

public class Teste {

    public Integer testar() {
        return 100;
    }

}

Criando um proxy para Teste.class eu consigo interceptar a chamada do método testar().
Gostaria de saber se existe a possibilidade de retornar, por exemplo, uma String “testando” no lugar de 100 quando o método testar() for chamado?

Conseguir você até consegue, mas por que faria isso?

Quem chamou o método não vai aceitar o tipo de retorno, provavelmente será lançada alguma RuntimeExeption.

E a ideia do padrão Proxy, é que a interface dele seja exatamente igual ao do objeto procurado, não?

Vamos supor que tenho um POJO:

public class Pojo {
	
	private Integer numero;
	
	public Integer getNumero() {
		return numero;
	}
	
	public void setNumero(Integer numero) {
		this.numero = numero;
	}
	
}

E tenho uma classe que mapeia certas configurações de acordo com os atributos do POJO:

...
	Configuracao config = new Configuracao(Pojo.class);
	config.add("numero", TipoNegocio.ALGUM_TIPO);
..

Gostaria de mudar para algo do tipo:

...
	Configuracao config = new Configuracao(Pojo.class);
	Pojo pojoProps = ProxyEntidade.criar(Pojo.class);
	config.add(pojoProps.getNumero(), TipoNegocio.ALGUM_TIPO);
..

Caso eu precise refatorar o POJO, por exemplo, eu não precisaria me preocupar em alterar o mapeamento.

Bom, esta é minha ideia. Se eu estiver viajando ou alguém quiser opinar sobre uma solução mais simples, eu estou aberto a sugestões.

Agradeço antecipadamente. :slight_smile:

Boa tarde ul1sses.
Uma possível solução seria:

	public <T> T testar(Class<T> type){
		...
	}

Ex:

Integer result = object.testar(Integer.class);
String result = object.testar(String.class);
MyType result = object.testar(MyType.class);

[quote=plic_ploc]Boa tarde ul1sses.
Uma possível solução seria:

	public <T> T testar(Class<T> type){
		...
	}

Ex:

Integer result = object.testar(Integer.class);
String result = object.testar(String.class);
MyType result = object.testar(MyType.class);

[/quote]

Minha preferencia é por não ter que alterar a estrutura atual do POJO.

[quote=Rodrigo Sasaki]Conseguir você até consegue, mas por que faria isso?

Quem chamou o método não vai aceitar o tipo de retorno, provavelmente será lançada alguma RuntimeExeption.

E a ideia do padrão Proxy, é que a interface dele seja exatamente igual ao do objeto procurado, não?[/quote]Precisa trocar o retorno para Object e quem chama verificar qual foi o tipo devolvido e tratar corretamente.

Entretanto, é uma necessidade muito estranha essa…