Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调用已传递的方法?这是代表团,对吗?_Java_Reflection_Delegates - Fatal编程技术网

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

Java 如何调用已传递的方法?这是代表团,对吗?,java,reflection,delegates,Java,Reflection,Delegates,好吧,我知道这个问题已经被问了几百次了,我知道我可能会得到“去搜索答案”的回答,但我还是要试着问。非常简单,我想传递一个方法并使用它来编写字符串。例如: void writeStuff(Method method) { method.invoke("the string to write"); } 这样,我就可以将接收字符串的方法交给它,比如System.out.print或LOGGER.info。见鬼,为什么没有任何方法接受字符串作为调用呢?您阅读了invoke的文档了吗 ,java

好吧,我知道这个问题已经被问了几百次了,我知道我可能会得到“去搜索答案”的回答,但我还是要试着问。非常简单,我想传递一个方法并使用它来编写字符串。例如:

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

这样,我就可以将接收字符串的方法交给它,比如System.out.print或LOGGER.info。见鬼,为什么没有任何方法接受字符串作为调用呢?您阅读了invoke的文档了吗


,java.lang.Object[])

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

事实上,你可以从流行的资料中读到这一点:


--tb

对于非静态方法,您需要它的对象,否则此所有者可以为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); }
});

对于一个静态方法,一个函数,确实不需要
这个
(所有者)。
在像Algol68这样的顶级终极语言中(1968年,但仍处于活动状态!),人们可以做到:

实y=如果为c,则为sin,否则为cos FI(x)

was sin和cos是类型为PROC(REAL)REAL的代码值的名称


Java在字段和方法之间做了一个可悲的区分:您可以使用相同名称的字段
intx
和方法
void x(boolean)
,重载方法
boolean x()
。对于类似函数对象的东西,我们永远不能使用
System.out.println

是的。即使阅读了我所知道的最多的东西,我也在与这种语言作斗争,而不仅仅是接受它。但我觉得,如果我在传递推荐信,这还不够吗?我不是说,“这是一个实例对象,特别是一个我希望您使用的方法。”?