Java和Kotlin中的Lambda之间的差异

时间:2020-05-09 05:47:57

标签: java kotlin lambda

我正在尝试找出Kotlin Map<String, SimpleData>的lambda之间的区别。 Kotlin网站说:“与Java的SAM转换相反,Kotlin具有适当的功能类型”

我认为这是最大的不同。因此,您需要Java中的Functional接口。在kotlin中,您具有函数类型。您不需要额外的界面。

您可以在Kotlin中调用lambda。因此,如果将Java中的lambda传递给函数,则必须在该函数的主体内部调用Single抽象方法。

class MapTest {
  final _mapHell = Map<String, SimpleData>(); // Change the Map type

  MapTest() {
    _mapHell['1'] = SimpleData(42, "Astfgl"); // Use int, ie: '1'
    _mapHell['666'] = SimpleData(1234, "Vassenego");
  }

  MapTest.fromJson(Map<String, dynamic> json) {
    _mapHell = jsonDecode(json['coworkers']);
  }

  Map<String, dynamic> toJson() => {
    'coworkers' : jsonEncode(_mapHell),
  };
}

和科特林的方式:

s and Java

因此,我认为这是kotlin的一大优势,您可以使用自定义数量的参数等创建自己的lambda,而无需创建额外的功能接口或使用任何currying。

另一个差异和优势是可以使用接收方调用lambda。我想每个人都知道这个概念,所以我可以在这里略过。您可以构建DSL,并具有范围功能。

啊,如果它是最后一个参数,则可以在()之外传递lambda。我认为这也是java和lambda之间的重要区别。它更具可读性。

我认为那是区别,还是我错过了一些基本知识?

更新:

由于@Animesh Sahu,我忘记了内联lambda的可能性

并且可以返回一个块内的最后一个表达式。因此,您不必显式调用“ return”

0 个答案:

没有答案