Java8中新增了有关对lambda表达式的支持,其本质是一种编译阶段的语法糖,效果是双向的,代码看似简洁的前提下牺牲了部分可读性。

我们可以尝试实现一些有意思的东西,先来看段C#委托(delegate)的代码

namespace Hello
{class Program{static Action<int> callback;static MyDelegate myDelegate;static void Main(string[] args){callback = (int i) => {Console.WriteLine(i);};callback.Invoke(2);myDelegate = (a, b)=> {return a + b;};//myDelegate = add; // C#特有的用法,使得委托具备了类似函数指针的特征int ret = myDelegate.Invoke(1, 2);Console.WriteLine(ret);}static int add(int a, int b){return a + b;}}delegate int MyDelegate(int a, int b);
}

之后是Java的代码:

public class Hello {static IAction<Integer> callback;static MyDelegate myDelegate;public static void main(String[] args){callback = (Integer i) -> {System.out.println(i);};callback.invoke(2);myDelegate = (a,b) -> {return a+b;};//myDelegate = add; // 不支持这种赋值行为int ret = myDelegate.invoke(1,2);System.out.print(ret);}static int add(int a, int b) {return a+b;}
}
public interface IAction<T> {void invoke(T t);
}
public interface MyDelegate {int invoke(int a, int b);
}

对比可以发现,二者何其相似。

其中略微有一点不同,C#中的委托可以直接接受方法赋值(语法糖更为灵活)

由此也不难猜想,C#中的委托本质应该也是某种Object的变种,只不过通过语法糖赋予其类似函数指针,以及更多丰富多变的对象行为,如:BeginInvoke、EndInvoke 等异步行为

C#中的委托和Java中的“委托”(Java8 lambda表达式)相关推荐

  1. JAVA面试要点006---.net中的委托与java中的代理模式和委托

    1.1.1 定义 委托是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示: //Code in C# ...

  2. flex array java_Flex中ArrayCollection 与java中的ArrayList互转

    Flex中ArrayCollection与java中的ArrayList互转 这里说这是Flex用remoting传一个ArrayCollection到后台(后台也用ArrayCollection接参 ...

  3. C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

    C# 委托 (一)-- 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可 ...

  4. 委托、Lambda表达式和事件

    1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...

  5. [深入学习C#]匿名函数、委托和Lambda表达式

    转载自诗人江湖老,原文地址 匿名函数(Anonymous Function)是表示"内联"方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树 ...

  6. c# python 相互调用_【GhPython】Python如何使用“委托”和lambda表达式

    [版权声明] | 作者:月之眼 | 首发于大水牛参数化设计平台 | 如需转载请联系作者 | 如果觉得文章不错,欢迎分享  函数作为参数传入  在python中函数是能作为参数输入函数的.这个有点类似于 ...

  7. 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别...

    在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...

  8. part01.03 委托与 Lambda 表达式(三):Lambda 表达式

    "Lambda 表达式"是一个匿名函数,它可以包含表达式和语句,用于创建委托或表达式树类型 A. 用Lambda表达式代替匿名方法,复杂冗长的形式 格式:( 显式类型参数列表 )= ...

  9. C#委托与Lambda表达式

    C#委托与Lambda表达式 一.自定义委托 总结 1.委托必须先声明在使用: 2.委托使用必须实例化,在实例化后要把委托的方法名带入: 3.委托的调用必须与委托的方法参数一致: 二.泛型与多播委托 ...

最新文章

  1. python编程入门经典实例-总算明了python编程入门经典实例
  2. 全球及中国油气装备行业投资状况及运营前景研究报告2021版
  3. 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)
  4. 真正的取真实IP地址及利弊Asp.net
  5. python函数太多_numpy Loadtxt函数似乎消耗了太多内存
  6. OpenCV+3计算机视觉++Python语言实现+第二版pdf
  7. 基础知识—函数-默然参数
  8. 口罩热销卖断货,有的商家却坐地涨价,中国青年报:电商不该借机发疫情财...
  9. JavaScript 是如何工作的:WebRTC和对等网络的机制!
  10. 数据结构(一):并查集
  11. 紫书5-16UVa212
  12. WINVNC Server详解
  13. python基本语句实验心得_总算领会python语言学习心得
  14. 地铁WIFI值28亿?运营商终于不用背锅了
  15. 第七周学习周报20181022-20181028
  16. CSS3之正方体旋转
  17. innodb buffer pool管理--free list
  18. IDG刘雨坤:关于SaaS业务七点经验
  19. js用map筛选指定元素(ES6的map方法)
  20. PhotoShop CC 2017软件整体界面及常规设置

热门文章

  1. 不做etl sql 怎么直接取_我们可以不再使用ETL了吗?
  2. ❤️《Vue前端基础框架集合从入门到高级》(小白也可学,建议收藏)❤️
  3. 圆角边框(HTML、CSS)
  4. 'React' must be in scope when using JSX react/react-in-jsx-scope报错:
  5. 江西理工大学c语言考试题库,江西理工大学C语言程序设计竞赛(初级组)(示例代码)...
  6. Codeforces Round #565 (Div. 3) B. Merge it!
  7. [翻译]Hystrix wiki–How it Works
  8. sqlalchemy学习
  9. 用express搭建网站
  10. 关于异常的合理处理方式