Cal*_*ers 30 c# java processing delegates anonymous-function
在C#中,您可以匿名定义委托(即使它们只不过是语法糖).例如,我可以这样做:
public string DoSomething(Func<string, string> someDelegate)
{
// Do something involving someDelegate(string s)
}
DoSomething(delegate(string s){ return s += "asd"; });
DoSomething(delegate(string s){ return s.Reverse(); });
Run Code Online (Sandbox Code Playgroud)
是否可以在Java中传递这样的代码?我正在使用处理框架,它有一个相当旧版本的Java(它没有泛型).
Mic*_*mlk 61
前Java 8:
最接近Java的代理是单方法接口.您可以使用匿名内部类.
interface StringFunc {
String func(String s);
}
void doSomething(StringFunc funk) {
System.out.println(funk.func("whatever"));
}
doSomething(new StringFunc() {
public String func(String s) {
return s + "asd";
}
});
doSomething(new StringFunc() {
public String func(String s) {
return new StringBuffer(s).reverse().toString();
}
});
Run Code Online (Sandbox Code Playgroud)
Java 8及以上版本:
Java 8将lambda表达式添加到该语言中.
doSomething((t) -> t + "asd");
doSomething((t) -> new StringBuilder(t).reverse().toString());
Run Code Online (Sandbox Code Playgroud)
Gre*_*zky 13
不完全是这样,但Java有类似的东西.
它被称为匿名内部类.
让我给你举个例子:
DoSomething(new Runnable() {
public void run() {
// "delegate" body
}
});
Run Code Online (Sandbox Code Playgroud)
它有点冗长,需要一个接口来实现,但除此之外,它几乎是一样的