好的,我知道这已经被问了数百次了,我知道我可能会得到“去寻找答案”的回应,但无论如何我都会尝试询问。很简单,我想传递一个方法并用它来写一个字符串。例如:
void writeStuff(Method method) {
method.invoke("the string to write");
}
这样,我可以将接收字符串的方法交给它,例如 System.out.print 或 LOGGER.info。哎呀,为什么不接受任何接受 String 作为
好的,我知道这已经被问了数百次了,我知道我可能会得到“去寻找答案”的回应,但无论如何我都会尝试询问。很简单,我想传递一个方法并用它来写一个字符串。例如:
void writeStuff(Method method) {
method.invoke("the string to write");
}
这样,我可以将接收字符串的方法交给它,例如 System.out.print 或 LOGGER.info。哎呀,为什么不接受任何接受 String 作为
对于非静态方法,您需要它的对象,否则此所有者可以为空。然后是要处理的异常。
void writeStuff(Object owner, Method method) {
method.invoke(owner, "the string to write");
}
因此,直到下一个 java 版本,使用一个接口(使用一个方法)并传递这些实例:
interface Printable { void print(String s); }
void writeStuff(Printable p) {
p.print("...");
});
writeStuff(new Printable() {
@Override public void print(String s) { System.out.println(s); }
});
对于静态方法、函数,确实不需要this
(所有者)。在像 Algol68(1968 年但仍然活跃!)这样的顶级终极语言中,可以这样做:
REAL y = IF c THEN sin ELSE cos FI (x);
sin 和 cos 是 PROC(REAL)REAL 类型的代码值的名称。
Java 对字段和方法做了一个可悲的区分:你可以有一个同名的字段int x
和方法,重载方法。对于函数对象之类的东西,人们永远无法使用.void x(boolean)
boolean x()
System.out.println
您是否阅读过调用的文档?
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object , java.lang.Object[])