我可以使用retrolambda来启用Android API级别<24的lambdas.这样可行
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
Run Code Online (Sandbox Code Playgroud)
这也有效
Runnable runLater = () -> Timber.d("Lambdas work!");
runLater.run();
Run Code Online (Sandbox Code Playgroud)
但是这个没有
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
Run Code Online (Sandbox Code Playgroud)
最后一个适用于Android API Level 24,但在其他设备上,此代码会导致崩溃
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
Run Code Online (Sandbox Code Playgroud)
我试图启用Java 8.而不是使用retrolambda.前两个代码示例仍然有效,尽管butterknife停止工作.https://developer.android.com/preview/j8-jack.html#configuration这里ava.util.function
被认为是支持的,但在运行第三个时,我仍然得到一个崩溃,这一次却是有一点不同
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1
Run Code Online (Sandbox Code Playgroud) 我有一个Kotlin代码:
fun showAdWithCallback(callback:() -> Unit) {
if (AdsPrefs.shouldShowInterstitialAd()) {
mInterstitialAd.show()
this.callback = callback
} else {
callback()
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想从Java类中调用此方法。我对如何称呼它感到困惑。这是我尝试过的
showAdWithCallback(() -> {
return null;
});
Run Code Online (Sandbox Code Playgroud)
但是它显示以下错误。