Pq o metodoDesconhecido é desconhecido e sao mais de 250 casos. Nao compensa “refatorá”-los…
Bem, de qualquer forma não será possivel utilizar Reflections no meu caso, porque a aplicacao utiliza o framework GWT (Google Web Toolkit), que transforma tudo pra javascript. Ou seja? Nao eh possivel utilizar reflecction. Bem, tem um framework que promete suportar Reflection no GWT, mas isso gera dependencia, e futuros problemas na atualizacao de bibliotecas.
Você pode receber um Object… mesmo, ele vai funcionar para todos esses casos.
Ai, você pode fazer algo parecido com isso:
public void metodoDesconhecido(AsyncCallback async, Object... objs){
if (objs == null || objs.length == 0)
throw new IllegalStateException("Objects cannot be null or empty. Unable to process.");
for (Object obj : objs) {
if (obj instanceof Integer) {
Integer value = (Integer) obj;
// Trabalha com Integer...
} else if (obj instanceof String) {
String value = (String) obj;
// Trabalha com String...
} else if (obj instanceof List) {
List<?> value = (List<?>) obj;
// Trabalha com List<?>...
}
}
}
[quote=Rafael Guerreiro]Você pode receber um Object… mesmo, ele vai funcionar para todos esses casos.
Ai, você pode fazer algo parecido com isso:
[code]
public void metodoDesconhecido(AsyncCallback async, Object… objs){
if (objs == null || objs.length == 0)
throw new IllegalStateException("Objects cannot be null or empty. Unable to process.");
for (Object obj : objs) {
if (obj instanceof Integer) {
Integer value = (Integer) obj;
// Trabalha com Integer…
} else if (obj instanceof String) {
String value = (String) obj;
// Trabalha com String…
} else if (obj instanceof List) {
List<?> value = (List<?>) obj;
// Trabalha com List<?>…
}
}
}
[/code][/quote]
Entao eu teria que modificar os 250 metodos que funcionam normalmente, certo?
Isso nao iria funcionar pra mim. Muita mudanca, para tentar deixar o codigo limpo…
Eu não entendi o que você disse quanto aos 250 métodos…
Pode me mostrar alguns deles? :lol: eu ainda não desisti!
-EDIT-
Como não dá para usar reflection? Você não precisa executar um dos 250 métodos baseado em um array de parametros?
Você pode fazer primeiro um array que vai conter os tipos de cada um deles, e depois você passa os 2 arrays, o primeiro com o tipo e o segundo com o valor dos mesmos.
[quote=Rafael Guerreiro]Eu não entendi o que você disse quanto aos 250 métodos…
Pode me mostrar alguns deles? :lol: eu ainda não desisti![/quote]
:shock:
Voce eh engraçado Rafa.
Nao vai adiantar colocar o metodo aqui. Vou tentar explicar melhor…
Pensa assim: Toda comunicacao com o servidor requer um metodo desse, e cada metodo eh diferente. Estamos tentando implementar uma forma de sempre que tiver alguma falha (perda de sessao por exemplo) iremos chamar o metodo novamente e se der errado, forcamos o recarregamento da pagina. O codigo para isso eh simples, mas eh copiar e colar pela aplicacao toda.
AsyncCallback<Object> async = new AsyncCallback<Object>() {
@Override
public void onFailure(Throwable caught) {
RichClientEntryPoint.getInstance().flashAlert(constantsStrings.common_reconnecting() + "(EFLIB:4)");
if (retryOnce) {
retryOnce = false;
Timer t = new Timer() {
public void run() {
//tenta chamar o metodo novamente, enviando esse async.
}
};
t.cancel();
t.schedule(1000);
} else {
//recarregar
}
}
@Override
public void onSuccess(Object result) {
retryOnce = true;
//Faz o que tem que fazer quando da certo.....
}
};
-EDIT-
Em Ruby dá para você executar um bloco de código dentro de um método. Você sabe se existe algo parecido com isso no java?
Em Ruby é a palavra reservada yield…
[quote=Rafael Guerreiro]Certo! Agora entendi o tal do ctrl+c e ctrl+v.
Todos esses métodos são da mesma classe?
Você viu isso aqui?
[quote=Rafael Guerreiro]
-EDIT-
Como não dá para usar reflection? Você não precisa executar um dos 250 métodos baseado em um array de parametros?
Você pode fazer primeiro um array que vai conter os tipos de cada um deles, e depois você passa os 2 arrays, o primeiro com o tipo e o segundo com o valor dos mesmos.
[/quote][/quote]
Eles estao na mesma classe, mas sao chamados de diferentes.
Eu vi, entao eu acho que funcionaria… Isso se nao tivesse o GWT no meio.
Isso me lembra as solucoes mirabolantes do CVNO Utils, nao?