如何在Android N 预览版中使用Java8的新特性

新闻 Android
Android团队发布的Android N Preview中给我们带来了很多提升,包括由Jack编译器提供的Java 8支持。在这篇文章中,我们将来看看它究竟对Android开发者意味着什么,以及如何尝试新的语言特性。

Android团队发布的Android N Preview中给我们带来了很多提升,包括由Jack编译器提供的Java 8支持。在这篇文章中,我们将来看看它究竟对Android开发者意味着什么,以及如何尝试新的语言特性。

概览

在这篇文章中,去介绍Oracle Java 8的新特性并没有太大意义 —— 很多信息已经在互联网上有了。

另一方面,Android 官方的Java 8公告留下了很多开放的问题给开发者们,感觉上并非所有的原生 Java 8 功能都是可用的。更详细的 技术公告确认了这一点。我们可以根据在 Android N 中的可用性,将这些语言特性分类如下:

Android Gingebread (API 9)及以上:

  • Lambda 表达式

  • java.util.function

Android N及以上:

  • 默认和静态interface方法

  • 可重复的注解

  • 流(Streams)

  • 反射APIs

所以对Java 8特性和使用的minSdkVersion之间的关联性,开发者必须去精心选择。我们也必须注意到语言向后兼容是由Jack编译器提供的。在概念上,Jack编译器将javac,ProGuard,以及dex的功能合并 到了一个转换步骤中。这意味着其中没有中间的Java字节码可用,且像是JaCoCo和Mockito的工具将无法工作,DexGuard也一样 (ProGuard的企业版本)。让我们祈祷这只是一个早期的preview版本,且这些问题将在未来被修复。

Lambda表达式以及相关的函数功能APIs —— 这是一个每个Android开发都会喜欢的东西。这类功能将会对增加代码可读性极为有用 —— 它替代了提供事件监听器的匿名内部类。而之前只能通过额外的工具来实现,或者由Android Studio编辑器去折叠代码。

默认及静态interface方法可以帮助我们减少额外的工具类的数量,但显然不是最需要的特性。还有一些其他的新增功能,我希望去说的更详细一些,因此不在本文的范围内。

对我来说最有趣的事 —— Java 8 流(Streams) —— 在当前的预览版中不可用。我们可以发现事实上它刚被merge到AOSP源码,所以期望可以在下个N Preview 或者 Beta release中见到它。如果你实在等不及去浏览 —— 可以试试使用 Lightweight-Stream-API,目前的一个开源向后兼容。

总结

在这篇文章中,我们了解了Java 8的用例,以及目前其在Android N Preview SDK的实现情况。我们也看到了当前Jack编译器的限制,及其在***发布前可能被修复的功能。

责任编辑:张燕妮 来源: Bug制造机
相关推荐

2021-12-10 14:53:17

微软Windows 11Windows

2013-06-27 09:35:26

Windows 8.1预览版特性

2021-12-09 22:22:19

Windows 11操作系统微软

2017-03-29 20:30:03

2013-06-27 13:01:58

Windows 8.1

2021-11-19 05:54:46

Windows 11操作系统微软

2013-11-04 17:28:44

Android

2010-04-01 09:29:18

2016-10-18 13:42:17

UbuntuGNOME Sushi预览

2009-04-16 07:50:51

GoogleAndroid移动OS

2022-03-25 19:06:12

微软Windows 11

2012-02-13 11:56:26

JavaJDKJava 8

2021-07-23 20:00:40

微软Windows 11Windows

2013-06-24 14:57:43

Windows 8.1

2014-05-08 13:36:07

Android Wea开发者预览版

2012-02-29 10:09:14

Windows 8消费者预览版

2011-09-20 09:35:02

Windows 8密钥

2021-02-01 12:36:59

C# Channels存储

2021-03-02 07:13:54

Java8版本升级

2012-02-23 09:28:28

微软Windows 8
点赞
收藏

51CTO技术栈公众号