当前位置: 首页 > 面试题库 >

Android的Java 7语言功能

齐运诚
2023-03-14
问题内容

只是想知道是否有人尝试过将新的Java 7语言功能用于Android?我知道Android会读取Java吐出的字节码并将其转换为dex。所以我想我的问题是它可以理解Java 7的字节码吗?


问题答案:

如果你使用的是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。


 类似资料:
  • 本文向大家介绍Android实现系统语言切换功能,包括了Android实现系统语言切换功能的使用技巧和注意事项,需要的朋友参考一下 简单介绍下这个需求的缘由,这段时间因公司业务需要,其中有一项“设置系统语言”功能,就是在使用APP的过程中,动态的去切换整个Android机器的语言,具体参照手机设置页面有语言切换功能。起初想来是很简单的事情嘛,不就是个简单的资源国际化嘛,strings.xml资源文

  • 类型的函数 (Types of Functions) 功能可以以多种方式分类。 在这里,我们根据它们采用的参数的数量和类型以及结果类型对它们进行了分类。 功能可以, Atomic - 参数是原子的并产生原子结果 Aggregate - 列表中的原子 Uniform (list from list) - 扩展原子的概念,因为它们适用于列表。 参数列表的计数等于结果列表的计数。 Other - 如果该

  • 本文向大家介绍Android app应用多语言切换功能实现,包括了Android app应用多语言切换功能实现的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下 1.添加多语言文件 在不同的 value 文件夹下(例如 value 、value-en、values-zh-rTW 文件夹)添加不同语言的 string.

  • 数据操作语言的新增功能 Microsoft® 4.x 版有用于数据操作语言的新增和增强语句。 有关这些语句的详细信息,参见: EXECUTE 语句 TRANSACTION 语句 PROCEDURE 子句 请参阅 新增功能的概述 Windows 注册表设置的新增功能 数据定义语言的新增功能

  • 数据定义语言的新增功能 Microsoft® Jet 4.x 版有用于数据定义语言的新增和增强语句。 有关这些语句的详细信息,参见: ALTER TABLE 语句 CREATE USER 或 GROUP 语句 CONSTRAINT 子句 ADD USER 语句 CREATE PROCEDURE 语句 DROP USER 或 GROUP 语句 CREATE TABLE 语句 ALTER USER 或

  • 数据操作语言的新增功能 Microsoft® 4.x 版有用于数据操作语言的新增和增强语句。 有关这些语句的详细信息,参见: EXECUTE 语句 TRANSACTION 语句 PROCEDURE 子句 请参阅 新增功能的概述 Windows 注册表设置的新增功能 数据定义语言的新增功能