混合Kotlin和Java代码

时间:2018-04-16 10:38:04

标签: java android kotlin

我想在Kotlin Android项目中使用Java 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回调?

在以前的lib版本中,有一个Java挂起的结果回调类,它不再可用。

2 个答案:

答案 0 :(得分:4)

Abreslav said

  

单位是一种类型(与虚空不同)并且具有一个值(与Void不同)。这样就可以在通用类中统一处理Unit。即我们不需要另外两种类型:返回某些东西的函数和返回void的函数。它只是一种类型:返回某些东西的函数可能是单位。

     

介绍void会在类型推断,任何类型函数的组合等等方面带来许多问题

因此,与Kotlin不同,在Java中,您需要明确地返回此值。

你的lambda必须是:

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

答案 1 :(得分:0)

是的,您可以使用以下内容:

fotoApparat.takePicture().
                toPendingResult().
                whenAvailable(bitmapPhoto -> {
        ImageView imageView = (ImageView) findViewById(R.id.result);
        // rest of your code
});