继承内部java类的问题

时间:2015-04-12 23:50:11

标签: android kotlin

我正在使用Kotlin创建一个Android动态壁纸。这需要一个扩展WallpaperService的类,它包含一个扩展WallpaperService.Engine的内部类。

所以我写了这个:

import android.service.wallpaper.WallpaperService
import android.service.wallpaper.WallpaperService.Engine

public class MyWallpaperService : WallpaperService() {

    override fun onCreateEngine(): Engine = MyEngine()

    private inner class MyEngine : Engine() {

    }
}

问题是我在编译时遇到以下2个错误:

Error:java.lang.RuntimeException: Error generating constructors of class MyEngine with kind IMPLEMENTATION 

Error:java.lang.UnsupportedOperationException: Don't know how to generate outer expression for lazy class MyWallpaperService

我无法弄清楚为什么会这样,所以任何帮助都会受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

请参阅KT-6727

您可以尝试以下解决方法:

private inner class MyEngine : super.Engine() {
}

答案 1 :(得分:0)

我找到的最佳解决方案是使用中间Java类:

public class Intermediate extends WallpaperService.Engine {
    public Intermediate(WatchfaceService outer) {
        outer.super();
    }
}

然后Kotlin WallpaperService中的内部类应该继承Intermediate,将外部类作为参数传递。

public class MyWallpaperService : WallpaperService() {
    override fun onCreateEngine(): Engine = MyEngine()
​
    private inner class MyEngine : Intermediate(this) {
    }
}

答案 2 :(得分:0)

对于任何其他搜索此问题的人,我想指出的是,这现在可以在Kotlin中使用 (我使用的是1.4.10,我尚未验证此版本已修复)。

要记住的关键是必须将Engine标记为内部类,否则Kotlin将不知道如何引用要继承的Engine。

class SampleService : WallpaperService() {

// region override
override fun onCreateEngine(): Engine {

    return IntermediateEngine()
}

// endregion

// region inner class

inner class IntermediateEngine() : Engine() {

    
}

// endregion

}