我想得到一个与此类似的Method对象:
Method myMethod = MyClass.class.getDeclaredMethod("myDeclaredMethod",Arg1Class.class);
但!我想编译时间检查方法“myDeclaredMethod”的存在.我实际上不需要动态选择方法,我只需要对它的引用,所以我可以将它传递给另一个方法……类似于C有函数指针的方式.我想做这样的事情:
#include <stdio.h>
void helloWorld() {
printf("hello\n");
}
void runFunction( void (myfunc)() ) {
myfunc();
}
int main() {
runFunction(helloWorld);
return 0;
}
注意,如果我在调用“runFunction(helloWorld)”中输入“helloWorld”,我会收到编译时错误.如果可能的话,我想在Java中使用相同的编译时错误.
最佳答案 我担心你不能用Java做到这一点.
但是,在Java中实现此目的的通常方法是定义一个接口,该接口将仅声明一个方法,即您要“作为参数传递”的方法,并在类中实现它.您的类必须实现您感兴趣的方法.当您想要将“引用”传递给方法时,实际上是传递了接口的实例.你可以在上面调用你的方法.
一个例子可以解释这个:
interface Something {
void doSomething();
}
class HelloWorld {
void doSomething() {
System.out.println("Hello world");
}
}
class Main {
void runFunc(Something s) {
s.doSomething();
}
public static void main(String... args) {
runFunc(new HelloWorld());
}
}
问题是,如果你想调用另一个方法,你需要创建一个实现Something的新类