Intereting Posts
Как объекты и сопутствующие объекты Kotlin и ленивые работы с памятью Служба не пишет в SharedPreferences Как передать аргументы в скрипт kotlin? Android numberPicker, передающий виджет Android в качестве значения Как сделать локальный метод расширения доступным в функции с приемником? Есть ли простой способ увидеть, какие исключения выбрала функция Котлина? Как перебирать hasmap в котлин? Каков правильный способ использования сравнения «больше чем», «меньше» по сравнению с целыми числами с нулевым значением в Котлине? Как я могу игнорировать все предупреждения для Kotlin в IntelliJ IDEA? Пустой конструктор для объекта kotlin для использования Firebase Интерфейс Azure Mobile App с Android (только для Kotlin) Исключение OutOfMemory при использовании Kotlin :: class.java.canonicalName Повсюду в Котлине В чем разница в двух вариантах JVM Kotlin «создать проект» в IntelliJ? Цепочка Наблюдения, чтобы избежать нескольких подписок

Проблемы, наследующие внутренний класс java

Я создаю андроидские живые обои, используя 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 

Я не могу понять, почему это происходит, поэтому любая помощь будет очень признательна.

См. KT-6727

Вы можете попробовать следующее обходное решение:

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

Лучшее решение, которое я нашел, – использовать промежуточный 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) { } }  public class MyWallpaperService : WallpaperService() { override fun onCreateEngine(): Engine = MyEngine()​ private inner class MyEngine : Intermediate(this) { } }