基于 Use Java 8 language features方法引用兼容任何minSdkVersion,那为什么方法引用需要API level 22?
目前,我在 build-gradle 中使用带有 com.android.tools.build:gradle:3.2.1
和 JDK 1.8 的 Android Studio 3.2.1我有:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
例子
public class SimpleBundleEntry<V> extends BundleEntry<V> {
public SimpleBundleEntry(String key, V value,
BundleWriter<V> writer, BundleReader<V> reader)
{/*init*/}
// ...
public interface BundleReader<V> {
V readValue(Bundle bundle, String key);
}
public interface BundleWriter<V> {
void writeValue(Bundle bundle, String key, V value);
}
}
有问题的代码
public static BundleEntry<Boolean> ofBoolean(String key, Boolean value) {
return new SimpleBundleEntry<>(key, value,
Bundle::putBoolean, // <------------------- PROBLEM HERE
(bundle, k) -> bundle.getBoolean(k));
}
最佳答案
我不知道你在调用什么方法,但这里有两个不同的东西。
Android 是基于 java 构建的,这意味着您在手机上安装了 java 版本来运行操作系统。
随着 java 的更新,一些方法被添加到框架中,因此有些方法在 1.8 中存在,但在 1.7 中不存在
但是Android也是一个获取更新的平台,此时我们是第28个版本(https://developer.android.com/studio/releases/platforms)。
这个版本的每个版本都有一组新的方法,这些方法在以前的版本中不存在。
因此,如果您正在调用 Android 22 中引入的方法,并且您正在 API 16 手机上运行您的应用程序,这将导致崩溃。
为防止这种情况,您必须将需要 Android API 22 的代码包围起来
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
// call the method that needs API 22 at least
} else {
// do something backward compatible
}
关于java - 方法引用需要 API 级别 22,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53987485/