如何调用传递的方法?这是代表团,对吗?

时间:2012-10-25 15:45:23

标签: java reflection delegates

好的,我知道已经被问过并回答了数百次,而且我知道我可能会去寻找答案"回应,但无论如何我都会去尝试。很简单,我想传递一个方法并用它来写一个字符串。例如:

void writeStuff(Method method) {
    method.invoke("the string to write");
}

这样,我可以将接收字符串的方法(例如System.out.print或LOGGER.info)交给它。哎呀,为什么不任何接受String作为

方法

3 个答案:

答案 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)

答案 2 :(得分:0)

您还必须指定应该调用该方法的对象。

事实上,你可以从热门资料中读到这个:

Javadoc API 1.7 for invoke

Sun/Oracle tutorial on invoking methods

- TB