Como faco para criar uma classe ou interface que receba um ResultSet e quando faco o (Cast) ele me retorne:
Integer getInteger();
através do
int getInt();
class XYZ implements ResultSet{
Integer getInteger(){
return new Integer(this.getInt());
}
}
e quando eu der:
XYZ qq=(XYZ)executeQuery();
e ai faco:
qq.getInteger(); e me retorna o valor já como WRAPPER.
Cara, da maneira que voce esta querendo fazer nao vai funcionar… voce vai receber uma referencia para um resultset da implementacao jdbc do driver que voce estiver usando… o que vc esta tendando resultaria na necessidade de implementacao de todos os metodos da interface, o que resulta na necessidade de controlar a posicao do cursor, verificar se ha registros e varios outros detalhes. Mesmo que a maior parte dos metodos voce delegue para a referencia original, vai ser muita duplicacao de codigo.
Essa ideia de implmementacao, pelo menos nos exemplos / necessidades que voce esta mostrando, nao tem muito sentido para existir… voce tera mais problemas com ela do que sem.
Se voce quiser tanto assim evitar o uso de new Integer() ( alias… eh soh para isso que voce quser a classe? ), entao use alguma coisa como
class RSWrapper {
private ResultSet rs;
public RSWrapper(ResultSet rs) {
this.rs = rs;
}
public Integer getInteger(int pos) {
return new Integer(this.rs.getInt(pos));
}
public Integer getInteger(String column) {
return new Integer(this.rs.getInt(column));
}
}
...
RSWrapper w = new RSWrapper(teuRs);
Integer i = w.getInteger("id");
Esse problema se resolve facilmente com o padrao Adapter.
Esse padrao converte a interface de uma classe em outra interface
esperada pelos clientes.
Existem muitas formas de fazer, uma delas é utilizando um “Objeto Adapter” como no exemplo abaixo:
class MeuResultSet{
private ResultSet rs;
public MeuResultSet(ResultSet rs){
this.rs = rs;
}
public Integer getInteger(int param){
Integer n = new Integer(rs.getInt(1));
return n;
}
}
Uma pesquisa sobre Padroes é sempre bom pq resolve problemas simples como esses de uma forma estandarizada.