相当于 Java 中的 C# 匿名方法?

在 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版本(它没有泛型)。


答案 1

Pre 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 将 lambda 表达式添加到语言中。

    doSomething((t) -> t + "asd");
    doSomething((t) -> new StringBuilder(t).reverse().toString());

答案 2

不完全像这样,但Java也有类似的东西。

它被称为匿名内部类。

让我举个例子:

DoSomething(new Runnable() {
   public void run() {
       // "delegate" body
   }
});

它有点冗长,需要一个接口来实现,但除此之外,它几乎是一样的。