我想有一个方法可以调用传递给它的方法。我的想法是在存在死锁异常的情况下重试,而不是在我想要的每个地方添加try
catch
,我宁愿使用类似retryExecution(Method method)
的实用程序。在retryExecution
方法内部是处理重试死锁的所有可重用逻辑。我想在没有使用AOP的情况下这样做,也没有使用接口(因为我告诉retryExcution方法调用的方法是什么,而不是依赖于通过接口的方法名称)。
答案 0 :(得分:10)
您使用界面。
您使用界面。
您使用界面。
或者您使用抽象类,这是该主题的变体。
如果您拒绝使用语言设计来解决此问题并“使用界面”,则会阅读java.lang.reflect
的javadoc并获取Method
对象并传递它。 http://java.sun.com/developer/technicalArticles/ALT/Reflection/
Java的设计者考虑并拒绝可调用方法作为第一类对象(例如,C ++或C函数值)。
答案 1 :(得分:0)
为此,您必须提供Method
实例,Object
,您要在其上调用方法和所需参数。
答案 2 :(得分:0)
您当然必须知道要重试的方法的名称。如果您知道方法名称并拥有该对象,那么调用该方法很容易。
public Object retry(Object objectWithTheMethod, String methodName) {
try {
Method method = objectWithTheMethod.getClass().getMethod(methodName);
return method.invoke(objectWithTheMethod);
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
}
}
如果方法需要一些参数,它会变得有点复杂。然后,您必须为getMethod指定参数类。即如果方法需要一个String参数:
Method method = objectWithTheMethod.getClass().getMethod(methodName, String.class);
答案 3 :(得分:0)