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

简介:

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编译器的限制,及其在最后发布前可能被修复的功能。  


原文发布时间为:2017-10-25 

本文作者:佚名

本文来自云栖社区合作伙伴“51CTO”,了解相关信息可以关注。

相关文章
|
4天前
|
安全 数据安全/隐私保护 Android开发
探索Android 12中的隐私保护特性
随着数字化时代的到来,个人隐私保护成为全球关注的焦点。Android作为广泛使用的操作系统之一,其在最新发布的Android 12版本中引入了多项隐私保护功能。本文将深入探讨这些新特性如何增强用户数据的安全性,以及它们对应用开发者和普通用户的具体影响。
14 3
|
5天前
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
18 3
|
11天前
|
Java 编译器 API
带你了解“Java新特性——模块化”
带你了解“Java新特性——模块化”
45 11
|
8天前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的对比分析
【7月更文挑战第19天】在移动开发的广阔天地中,安卓与iOS两大阵营各据一方,它们在开发环境、用户界面设计、性能优化等方面展现出独特的魅力与挑战。本文旨在深入探讨这两个平台在技术开发和用户体验上的根本差异,并分析这些差异如何影响开发者的策略和最终用户的选择。通过比较两者的编程语言、工具、框架以及设计理念,我们将揭示各自平台的优势与局限,为开发者提供实用的参考,并为消费者呈现一个更加清晰的平台选择视角。
|
10天前
|
监控 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性、工具和市场趋势
在移动应用开发的广阔舞台上,安卓与iOS两大操作系统扮演着主角。它们各自拥有独特的平台特性、开发工具和市场定位,这些差异深刻影响着开发者的决策和产品的最终形态。本文将深入分析这两大平台的关键技术差异,探讨各自的开发环境和工具集,以及它们在市场上的表现和未来的趋势,为开发者提供一个全面的视角,帮助他们在这两个平台上做出更明智的开发选择。
|
20天前
|
安全 Android开发 数据安全/隐私保护
探索Android 12的新特性:用户体验与隐私保护的革新
【7月更文挑战第7天】随着技术的不断进步,用户对手机操作系统的期望也日益增长。本文将深入分析Android 12带来的创新特性,特别是其如何通过重新设计的用户界面和增强的隐私功能提升整体体验,并探讨这些变化如何影响开发者和用户的互动模式。
|
17天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
19 1
|
19天前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
|
24天前
|
算法 Java 编译器
Java基础之lambda表达式(JDK1.8新特性)
Java基础之lambda表达式(JDK1.8新特性)
24 1
|
6天前
|
Ubuntu Java Linux
Java 16中ZGC有哪些性能提升的特性
Java 16中ZGC有哪些性能提升的特性?