相关疑难解决方法(0)

有没有办法在24以下的Android API上使用Java 8功能接口?

我可以使用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)

java lambda android functional-interface retrolambda

21
推荐指数
2
解决办法
6780
查看次数

如何将函数作为参数从Java传递给kotlin方法?

我有一个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)

但是它显示以下错误。

在此处输入图片说明

java android kotlin

5
推荐指数
1
解决办法
112
查看次数