0

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

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

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

4

3 回答 3

1

对于非静态方法,您需要它的对象,否则此所有者可以为空。然后是要处理的异常。

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

于 2012-10-25T15:54:43.050 回答
0

您是否阅读过调用的文档?

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Method.html#invoke(java.lang.Object , java.lang.Object[])

于 2012-10-25T15:50:24.727 回答
0

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

确实,您可以从流行的来源阅读此内容:

用于调用的 Javadoc API 1.7

关于调用方法的 Sun/Oracle 教程

--待定

于 2012-10-25T15:51:52.147 回答