支持的Java 8语言特性和API中指出,我们可以在任何最低sdk API级别的android项目中使用默认方法和lambda表达式。
然而,Stream库(java.util.stream)仅支持API 24及更高版本。有人能否解释一下为什么会这样?在我看来,这并不合理,因为据我所知,流API的添加不需要JVM修改,就像添加lambda或默认方法一样;它只是利用Java 8特性,例如集合上的默认方法,并向Java工具库添加了一些新代码。
然而,Stream库(java.util.stream)仅支持API 24及更高版本。有人能否解释一下为什么会这样?在我看来,这并不合理,因为据我所知,流API的添加不需要JVM修改,就像添加lambda或默认方法一样;它只是利用Java 8特性,例如集合上的默认方法,并向Java工具库添加了一些新代码。
能否有人解释一下为什么会出现这种情况?
因为谷歌没有时间机器。或者说,如果有的话,他们并没有用它来“修改”之前的 Android 版本。
就是它简单地利用了 Java 8 特性(如集合中的默认方法),并在 java util 库中添加了一些新代码吗?
没错。然而,谷歌无法更改之前 Android 版本上的 java.util
类。即使通过库添加新的 java.util
类也会存在问题。
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
}