我正在使用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
我无法弄清楚为什么会这样,所以任何帮助都会受到高度赞赏。
答案 0 :(得分:1)
答案 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
}