Android - WallpaperService 为什么我的引擎必须是内部类?

5 android wallpaper inner-classes

我正在制作一个简单的 android 动态壁纸,我按照Hello, Android 中的第 12 章作为我的指南。

壁纸服务的基本结构如下所示:

public class MyWallpaper extends WallpaperService {

    private class MyEngine extends Engine {
    //...
    }        

    //...

}
Run Code Online (Sandbox Code Playgroud)

按照书上的说法MyEngine 一定是内部类的MyWallpaper。我没有理由对此提出异议,但该书没有解释为什么必须如此。我不喜欢纯粹出于风格/美学原因使用内部类。

我想知道是否MyEngine实际上必须是一个私有内部类,如果是,为什么?

ian*_*sme 4

你应该这样做,因为class Engine它嵌套在abstract class WallpaperService. 如果您尝试使其不嵌套,您的 IDE/编译器会告诉您如下信息:

没有可访问的 WallService 类型的封闭实例来调用超级构造函数。必须定义一个构造函数并使用WallpaperService 的实例显式限定其超级构造函数调用(例如xsuper(),其中x 是WallpaperService 的实例)。

粗略地翻译,这意味着“你可以这样做,但最终会比只使用嵌套类更难看”。