android - 继承内部java类的问题

标签 android kotlin

我正在使用 Kotlin 创建一个安卓动态壁纸。这需要一个扩展 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

我无法弄清楚为什么会发生这种情况,因此非常感谢任何帮助。

最佳答案

我发现的最佳解决方案是使用中间 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) {
    }
}

关于android - 继承内部java类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596016/

相关文章:

android - 如何在多个 ViewModel 之间共享 LiveData?

android - initLoader() 和 onCreateOptionsMenu() 可能的线程错误/问题

android - 合并两个 Observable 流时如何发出最终值?

java - Android Studio 不断导入 import sun.jvm.hotspot.utilities.IntArray

Android 彩信数据库内容

function - Kotlin:覆盖(并指定)通用接口(interface)函数

android - 为什么我们需要 ViewModelProvider.Factory 来将 View 模型传递给屏幕?

java - Android - 立即更改 UI

java - 如何在 android EditText 中限制单引号?

android - Android Studio 布局上的 YoutubePlayer 错误