Existem muitas maneiras de implementar o método de retorno de chamada em Java, como –
Alguns usam o padrão do observador para resolver o problema de retorno de chamada, alguns usam o delegado .net como o método anônimo em java. Aqui, encontrei uma maneira de implementar o retorno de chamada usando reflexão java. Acho que é uma maneira muito boa.
[code]
package org.codexplo.util.callback;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class CallBack {
public static Object invoke(Object scope, String methodName,
Object... parameters) {
Object object = null;
Method method;
try {
method = scope.getClass().getMethod(methodName,
getParemeterClasses(parameters));
object = method.invoke(scope, parameters);
} catch (NoSuchMethodException | SecurityException
| InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
return object;
}
@SuppressWarnings("rawtypes")
private static Class[] getParemeterClasses(Object... parameters) {
Class[] classes = new Class[parameters.length];
for (int i = 0; i < classes.length; i++) {
classes[i] = parameters[i].getClass();
}
return classes;
}
}
[/code]
Casos de teste
[código]
package org.codexplo.util.callback;
import org.junit.Test;
public class TestCallback {
@Test
public void test() {
TestClass testClass = new TestClass();
CallBack.invoke(testClass, "sayHello");
CallBack.invoke(testClass, "sayHello", "Polish","Witaj świecie ");
CallBack.invoke(testClass, "sayHello", "Arabic","مرحبا العالم ");
CallBack.invoke(testClass, "sayHello", "French","Bonjour tout le monde ");
CallBack.invoke(testClass, "sayHello", "Chinese","你好世界 ");
}
class TestClass {
public void sayHello() {
System.out.println("English :"+" Hello world!");
}
public void sayHello(String language, String words) {
System.out.println(language + " : " + words);
}
}
}
[/código]
bom tiro!
se gostar da minha postagem, pode visitar meu blog: