我正在制作一个简单的Android动态壁纸,我正在关注 Hello,Android 的第12章作为我的向导。
壁纸服务的基础是这样的:
public class MyWallpaper extends WallpaperService {
private class MyEngine extends Engine {
//...
}
//...
}
根据该书MyEngine
必须是MyWallpaper
的内部类。我没有理由对此提出异议,但这本书没有解释为何必须如此。我不喜欢纯粹出于风格/美学原因而使用内部类。
我想知道MyEngine
实际上是否必须是私人内部类,如果是,为什么?
答案 0 :(得分:4)
你应该这样做,因为class Engine
嵌套在abstract class WallpaperService
中。如果你试图让它不嵌套,你的IDE /编译器会告诉你这样的事情:
没有封闭的类型实例 WallpaperService可以访问 调用超级构造函数。必须 明确定义构造函数 限定其超级构造函数 使用实例调用 WallpaperService(例如x.super()在哪里 x是WallpaperService的一个实例。
松散翻译的意思是“你可以这样做,但它最终会比你只使用嵌套类更糟糕。”
答案 1 :(得分:0)
您可以将您的引擎放在一个单独的类中。我只是用我自己的壁纸试了一下它编译好了。
在WallpaperService子类中的onCreateEngine()重写中,只需将“this”传递给Engine构造函数即可。构造函数应该将其作为WallpaperService接收。在构造函数的第一行中,调用wallpaperSvcObject.super()。