根据Android教程https://developer.android.com/studio/write/java8-support#supported_features,当使用Java 8时,try-with-resources与所有API级别兼容。
当前,我在这种和平的代码中遇到了异常:
try (final AssetFileDescriptor afd = context.getResources().openRawResourceFd(resId)) {
if (sample.load(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength())) {
if (!sample.isClosedSet()) sample.play(leftVolume, rightVolume, rate);
}
} catch (Exception e) {
e.printStackTrace();
}
例外是:
java.lang.IncompatibleClassChangeError: interface not implemented
at com.olekdia.supportsoundpool.SoundPoolCompat.$closeResource(SoundPoolCompat.java:260)
....
它发生在Andriod 4.2(api 16)上,但可以在更新的Android上正常工作。
我的gradle中也有这些行:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
这怎么了?