我想在一个Utils接受两个参数的类中创建方法,第一个是域类,第二个是来自域类的方法(作为引用传递)。这个Utils' 类有一个方法,该方法将创建该类的一个实例并在域类实例的范围内执行该方法。
例如,域类:
public class DomainClass {
public void dummyMethod() {}
}
Run Code Online (Sandbox Code Playgroud)
实用程序类:
public class Utils {
public static void execute(Class<?> clazz, Runnable referenceMethod) {
Object objInstance = clazz.getConstructor().newInstance();
// execute the 'referenceMethod' on the scope of 'objInstance'
}
}
Run Code Online (Sandbox Code Playgroud)
我想电话是这样的:Utils.execute(DomainClass.class, DomainClass::dummyMethod)。但是,这个场景有一些问题:
Utils类传递这个参数(现在我遇到了一些编译问题)?DomainClass::dummyMethod是对实例方法的引用,您需要提供一个对象实例来运行它。这意味着它不能是 a Runnable,但它可以是 aConsumer例如。
此外,这将有助于使execute方法通用:
public static <T> void execute(Class<T> clazz, Consumer<T> referenceMethod) {
try {
T objInstance = clazz.getConstructor().newInstance();
referenceMethod.accept(objInstance);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样调用execute:
Utils.execute(DomainClass.class, DomainClass::dummyMethod);
Run Code Online (Sandbox Code Playgroud)