2015-04-12 2 views
2

Я создаю андроидские живые обои, используя Kotlin. Для этого требуется класс, который расширяет WallpaperService, который содержит внутренний класс, который расширяет WallpaperService.Engine.Проблемы, наследующие внутренний класс java

Так я написал это:

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 

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

ответ

1

См KT-6727

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

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

Я пробовал это, к сожалению, он не работает. – user3307102

+0

Это не работает на Android :( – carlospiles

+0

Проблема K-6727 была отмечена дубликатом https://youtrack.jetbrains.com/issue/KT-3335, который был помечен как исправленный. Это проблема, или теперь разрешена? –

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) { 
    } 
} 
Смежные вопросы