代码之家  ›  专栏  ›  技术社区  ›  AAryz

为什么Java 8流只能从API级别24获得?

  •  7
  • AAryz  · 技术社区  · 7 年前

    Supported Java 8 Language Features and APIs 声明我们可以在具有任何min sdk API级别的android项目中使用默认方法和lambda表达式。

    然而,流库(java.util.Stream)仅支持API 24及更高版本。谁能解释一下为什么会这样?对我来说这没有意义,因为据我所知,添加流API 与添加lambda或默认方法不同,需要修改JVM;它简单地利用了Java 8的特性,如集合上的默认方法,并向Java util库添加了一些新代码?

    2 回复  |  直到 7 年前
        1
  •  6
  •   CommonsWare    7 年前

    谁能解释一下为什么会这样?

    因为谷歌没有时间机器。或者,如果他们是,他们不会用它来“翻新”以前版本的Android。

    它简单地利用了Java 8的特性,如集合上的默认方法,并向Java util库添加了一些新代码?

    对的然而,谷歌没有改变的手段 java.util Android早期版本上的类。甚至添加新的 JAVAutil公司 通过库的类将是一个问题。

        2
  •  1
  •   shubhamgarg1    4 年前

    这是因为java。util包是Android的一部分。jar即Android框架类(如Activity),它是用户手机的一部分,并不是每个应用程序都单独携带。

    这就是为什么现在Android添加了几乎所有的功能作为Android X库的一部分,然后可以在所有Android版本上支持该库。

    然而,使用Android Gradle插件4.0+,您也可以在较旧的API级别中使用流API。

    您需要添加desugaring库,

    dependencies{
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
    }
    

    并在compileOptions中添加coreLibraryDesugaringEnabled标志:

    compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    

    这将确保通过该库为应用程序中少于24个API添加新的Java lang API。

    资料来源: https://developer.android.com/studio/write/java8-support#library-desugaring