好的,我知道已经被问过并回答了数百次,而且我知道我可能会去寻找答案"回应,但无论如何我都会去尝试。很简单,我想传递一个方法并用它来写一个字符串。例如:
void writeStuff(Method method) {
method.invoke("the string to write");
}
这样,我可以将接收字符串的方法(例如System.out.print或LOGGER.info)交给它。哎呀,为什么不任何接受String作为
的方法答案 0 :(得分:1)
对于非静态方法,您需要其对象,否则此所有者可以为null。 然后还有例外处理。
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
。
答案 1 :(得分:0)
您是否阅读过调用文档?
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object,java.lang.Object [])
答案 2 :(得分:0)