android java语言_Android的Java 7语言功能

本文介绍了在Android Studio中使用Java 7语言功能的情况,包括自动启用Java 7的条件、可用的特性如钻石操作符、多捕获异常等。同时,文章提到了由于Android库目标为1.6,一些Java 7库功能受限,但可通过反射等手段使用部分隐藏API。
摘要由CSDN通过智能技术生成

小编典典

如果你使用的是Android Studio,则应自动启用Java 7 语言,而无需任何补丁。尝试资源要求API级别为19+,并且缺少NIO 2.0。

如果你无法使用Java 7功能,请参阅@Nuno关于如何编辑的答案build.gradle。

以下内容仅出于历史目的。

Java 7的一小部分肯定可以与Android一起使用(注意:我仅在4.1上进行过测试)。

首先,你不能使用Eclipse的ADT,因为它被硬编码为仅兼容Java编译器1.5和1.6。你可以重新编译ADT,但是我发现除了将整个Android一起重新编译之外,没有其他简单的方法可以做到这一点。

但是你不需要使用Eclipse。例如,Android Studio 0.3.2,IntelliJ IDEA CE和其他基于Javac的IDE支持编译到Android ,你甚至可以通过以下方式设置对Java 8的兼容性:

文件→项目结构→模块→(在第二个窗格中选择模块)→语言级别→(选择“ 7.0-Diamonds,ARM,multi-catch等”)

在IntelliJ上启用Java 7

这仅允许Java 7 语言功能,并且你几乎无法从中受益,因为一半的改进也来自库。你可以使用的功能是那些不依赖于库的功能:

Diamond operator (<>)

String switch

Multiple-catch (catch (Exc1 | Exc2 e))

Underscore in number literals (1_234_567)

Binary literals (0b1110111)

该try-with-resources语句-因为它需要非现有的接口“java.lang.AutoCloseable”(这个可以公开在4.4或以上版本使用)

@SafeVarargs批注-因为“ java.lang.SafeVarargs”不存在

…“ yet” :)事实证明,尽管Android库的目标是1.6,但Android源代码确实包含AutoCloseable之类的接口,而像Closeable这样的传统接口确实继承自AutoCloseable(尽管确实缺少SafeVarargs)。我们可以通过反思来确认它的存在。它们之所以被隐藏仅仅是因为Javadoc具有@hide标记,从而导致“ android.jar”不包含它们。

已经存在一个问题,如何使用隐藏的和内部的API构建Android SDK?关于如何找回这些方法的知识。你只需要用我们自定义的平台替换当前平台的现有“ android.jar”引用,那么许多Java 7 API都将可用(该过程类似于Eclipse中的过程。请检​​查项目结构→SDK。)

除了自动关闭功能之外,(仅)还显示了以下Java 7 库功能:

ConcurrentModificationException,LinkageError和AssertionError中的异常链接构造函数

用于基元的静态.compare()方法:Boolean.compare(),Byte.compare(),Short.compare(),Character.compare(),Integer.compare(),Long.compare()。

货币:.getAvailableCurrencies()、. getDisplayName()(但不带 .getNumericCode())

BitSet:.previousSetBit()、. previousClearBit()、. valueOf()、. toLongArray()、. toByteArray()

集合:.emptyEnumeration()、. emptyIterator()、. emptyListIterator()

自动关闭

Throwable:.addSuppressed()、. getSuppressed()和四参数构造函数

字符:.compare()、. isSurrogate()、. getName()、. highSurrogate()、. lowSurrogate()、. isBmpCodePoint()(但不包括 .isAlphabetic()和.isIdeographic())

系统:.lineSeparator()(未记录?)

java.lang.reflect.Modifier:.classModifiers()、. constructorModifiers()、. fieldModifiers()、. interfaceModifiers()、. methodModifiers()

NetworkInterface:.getIndex()、. getByIndex()

InetSocketAddress:.getHostString()

InetAddress:.getLoopbackAddress()

记录器:.getGlobal()

并发链接双端队列

AbstractQueuedSynchronizer:.hasQueuedPredecessors()

DeflaterOutputStream:3个带有“ syncFlush”的构造函数。

Deflater:.NO_FLUSH,.SYNC_FLUSH,.FULL_FLUSH,.deflate()用4个参数

基本上就是全部。特别是,NIO 2.0不存在,并且Arrays.asList仍然不是@SafeVarargs。

2020-03-11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值