您正在创建的Runnable 与任何其他匿名嵌套类没有区别。因此,您可以将任何“有效最终”对象引用传递给它。在您的情况下,Method 参考就可以了。
但是Method需要一个实例或class来操作,否则该方法不知道要调用哪个多态方法,也不知道要传递哪些数据。
如果您的 Java 版本是 8 之前的版本,您需要将对象实例传递给您的 createRunnable:
public Runnable createRunnable(Object instance, Method method) {
return new Runnable() {
try {
method.invoke(instance);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// handle exception
throw new RuntimeException(e);
}
};
)
在 Java-8 及更高版本中,您可以使用 lambda 方法引用,无需创建函数:
Runnable r = () -> {
try {
method.invoke(instance);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// handle exception
throw new RuntimeException(e);
}
};
或者,如果你已经知道方法和实例,你也可以使用
Runnable r = object::method;