加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中C#匿名方法的等价物?

发布时间:2020-12-15 07:38:42 所属栏目:Java 来源:网络整理
导读:在C#中,您可以匿名定义委托(即使它们只不过是语法糖).例如,我可以这样做: public string DoSomething(Funcstring,string someDelegate){ // Do something involving someDelegate(string s)} DoSomething(delegate(string s){ return s += "asd"; });DoSome
在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将lambda表达式添加到语言中.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读