6

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

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

public class MyWallpaper extends WallpaperService {

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

    //...

}

根据书上MyEngine 必须是一个内部类MyWallpaper。我没有理由对此提出异议,但这本书没有解释为什么必须如此。我不喜欢纯粹出于风格/美学原因使用内部类。

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

4

2 回答 2

4

你应该这样做,因为class Engine它嵌套在abstract class WallpaperService. 如果你试图让它不嵌套,你的 IDE/编译器会告诉你这样的事情:

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

粗略翻译的意思是“你可以那样做,但最终会比你只使用嵌套类更难看。”

于 2010-08-16T15:20:44.160 回答
0

您可以将引擎放在单独的类中。我只是用我自己的壁纸试了一下,它编译并运行良好。

在 WallpaperService 子类的 onCreateEngine() 覆盖中,只需将“this”传递给 Engine 构造函数。构造函数应将其作为 WallpaperService 接收。在构造函数的第一行,调用 wallpaperSvcObject.super()。

编辑:在考虑了贾斯汀·布瑟(Justin Buser)所说的话之后,我不确定我的建议是否好。您的引擎将失去对 WallpaperService 成员的访问权限,因为它都必须通过 wallpaperSvcObject。不知道他说的是不是这个。

于 2013-04-03T00:43:04.470 回答