gpt4 book ai didi

java - 如何调用传递的方法?这就是委托(delegate)吧?

转载 作者:行者123 更新时间:2023-12-01 15:05:06 25 4
gpt4 key购买 nike

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

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

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

的方法

最佳答案

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

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

因此,在 java 的下一个版本之前,人们使用接口(interface)(带有一个方法)并传递这些实例:

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 。

关于java - 如何调用传递的方法?这就是委托(delegate)吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com