在 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(); });
在Java中可以传递这样的代码吗?我正在使用处理框架,它有一个相当旧的 Java 版本(它没有泛型)。
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();
}
});
Java 8 及以上版本:
Java 8 http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html将 lambda 表达式添加到该语言中。
doSomething((t) -> t + "asd");
doSomething((t) -> new StringBuilder(t).reverse().toString());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)