java语言与安卓兼容性_Android 7的Java 7语言功能

f0fdc2f2c5ecff27e980f2336043605b.png

翻翻过去那场雪

如果您使用的是Android Studio,则应自动启用Java 7 语言而不添加任何补丁。Try-with-resource需要API级别19+,并且缺少NIO 2.0的东西。如果您不能使用Java 7功能以下仅为历史利益。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 - 钻石,ARM,多捕获等”)这只允许Java 7 语言功能,并且您几乎无法从中受益,因为一半的改进也来自库。您可以使用的功能是那些不依赖于库的功能:钻石运营商(<>)字符串开关多次捕获(catch (Exc1 | Exc2 e))数字文字中的下划线(1_234_567)二进制文字(0b1110111)而这些功能不能使用尚未:该try-with-resources语句-因为它需要非现有的接口“java.lang.AutoCloseable”(这个可以公开在4.4或以上版本使用)@SafeVarargs注释 - 因为“java.lang.SafeVarargs”不存在......“还是”:)事实证明,尽管Android的图书馆的目标是1.6,但Android源码确实包含AutoCloseable等接口,而像Closeable这样的传统接口确实从AutoCloseable继承(尽管SafeVarargs确实缺失了)。我们可以通过反思证实它的存在。隐藏它们只是因为Javadoc有@hide标记,导致“android.jar”不包含它们。关于如何恢复这些方法。您只需要将现有平台的现有“android.jar”引用替换为我们的自定义,然后就可以使用许多Java 7 API(该过程类似于Eclipse中的过程。检查项目结构→SDK。)除了AutoCloseable之外,(仅)还显示了以下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()AutoCloseableThrowable:.addSuppressed(),. getSuppressed()和4参数构造函数字符:.compare(),. isSurrogate(),. getName(),. highSurrogate(),. soSurrogate(),. isBmpCodePoint()(但没有 .isAlphabetic()和.isIdeographic())系统:.lineSeparator()(未记录?)java.lang.reflect.Modifier:.classModifiers(),. costructorModifiers(),. fieldModifiers(),. interfaceModifiers(),. methodModifiers()NetworkInterface:.getIndex(),. getByIndex()InetSocketAddress:.getHostString()InetAddress:。getLoopbackAddress()记录器:.getGlobal()ConcurrentLinkedDequeAbstractQueuedSynchronizer:.hasQueuedPredecessors()DeflaterOutputStream:带有“syncFlush”的3个构造函数。Deflater:.NO_FLUSH,.SYNC_FLUSH,.FULL_FLUSH,.deflate(),带有4个参数这基本上都是。特别是,NIO 2.0不存在,而Arrays.asList仍然不是@SafeVarargs。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值