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