2015-04-12 60 views
2

我使用Kotlin創建了Android動態壁紙。這需要一個擴展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) { 
    } 
}