gpt4 book ai didi

java - 混合 Kotlin 和 Java 代码

转载 作者:行者123 更新时间:2023-11-30 06:04:18 24 4
gpt4 key购买 nike

我想在 Java Android 项目中使用 Kotlin Android 库 (FotoApparat)。

在 Kotlin 代码库中,whenAvailble 函数获取 kotlin 回调作为参数,该回调将在异步操作完成时调用。

val photoResult = fotoapparat.takePicture()

// Asynchronously saves photo to file
photoResult.saveToFile(someFile)

// Asynchronously converts photo to bitmap and returns the result on the main thread
photoResult
.toBitmap()
.whenAvailable { bitmapPhoto ->
val imageView = (ImageView) findViewById(R.id.result)

imageView.setImageBitmap(bitmapPhoto.bitmap)
imageView.setRotation(-bitmapPhoto.rotationDegrees)
}

whenAvailable 代码可以找到 here

等效的 java 实现是:(以前该库是用 java 编写的)

fotoApparat.takePicture().
toPendingResult().
whenAvailable( /* some sort of call back */);

如何从 Java 代码提供 whenAvailable 回调?

在该库的早期版本中,有一个 Java 挂起结果回调类,该类不再可用。

最佳答案

阿布雷斯拉夫 said :

Unit is a type (unlike void) and has a value (unlike Void). This enable uniform treatment of Unit when it comes to generic classes. I.e. we don’t need another two types: a function that returns something and a function that returns void. It’s all one type: a function that returns something tat may be Unit.

Introducing void would pose many problems in areas like type inference, compositionality of any sort of functions, etc

因此,与 Kotlin 不同,在 Java 中您需要显式返回该值。

你的 lambda 需要是:

fotoApparat.takePicture().
toPendingResult().
whenAvailable(bitmapPhoto -> {
ImageView imageView = (ImageView) findViewById(R.id.result);
return Unit.INSTANCE;
});

关于java - 混合 Kotlin 和 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49855255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com