3

我正在编写需要在Java 7中运行和编译的库代码,因此我无法直接在Java 8中使用新的lambda功能。编写Java 7库代码以便与Java 8 lambda相配合

不过我还是喜欢代码要方便与Java 8使用例如:

  • 这将是有益的,如果内部类/位访客风格的图案可以通过Java的8个用户使用Lambda表达式
  • 我想提供方便与lambda表达式

我应该申请什么做法,以确保对Java 7和Java 8个用户my库的两个最好的体验使用的API?

+0

作为lamda只是客户端 - 即消费方法不知道它正在交给lambda - 没有。就像平常一样写下你的代码。您可能会尝试使用更多的单一方法接口,而不是其他方法 - 即要求两个参数都是SMI而不是执行这两个任务的单个参数 - 但这也会污染Java 7用户的代码。 –

回答

1

Lambda表达式基于单方法接口。在使用单一方法接口的实现的任何地方(例如,实现具有一个方法的接口的匿名内部类),Java 8用户可以改为使用lambda表达式。

看看如何在Java 8中修改集合类;例如添加到IterableforEach方法。每种方法都采用单一方法接口作为参数。

看一看:

为了使您的库可用预先的Java 8级的用户,你可能还需要提供支持老式方法迭代集合;不要强迫这些用户使用大量的匿名内部类。

+2

“使用单一方法接口的实现的地方......”不*任何地方*。有一些不能变成lambda。例如:使用实例变量的匿名类,具有递归调用自身方法的匿名类,在代码内使用'this'的匿名类,以及匿名类对象身份的独特性非常重要的匿名类。 – newacct