2010-08-16 97 views
4

我正在研究一個簡單的Android動態壁紙,我從開始閱讀第12章,你好,Android作爲我的指導。Android - WallpaperService爲什麼我的引擎必須是內部類?

壁紙服務的裸機是這樣的:

public class MyWallpaper extends WallpaperService { 

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

    //... 

} 

據該書MyEngine必須是一個內部類的MyWallpaper。我沒有理由對此提出異議,但該書沒有解釋爲什麼這一定是如此。我更喜歡不純粹爲了文體/美學原因而使用內部類。 ,

我在想,如果MyEngine實際上已經是一個私有內部類,如果是這樣,爲什麼?

回答

4

你應該做這種方式,因爲class Engine嵌套在abstract class WallpaperService內。如果你儘量做到不嵌套,你的IDE /編譯器會告訴你是這樣的:以

類型沒有外圍實例WallpaperService是可訪問的調用超級構造函數。必須 定義構造函數,並明確地規定其超級構造函數 調用 WallpaperService(例如x.super(),其中 x是WallpaperService的一個實例)。

其中,鬆散地翻譯,意思是「你可以這樣做,但它會比如果你只是使用嵌套類醜陋的結局。」

+0

實際上它說你不能這樣做,本質上如果你不能使用WallpaperService.this來引用父WallpaperService實例,那麼它不會在動態壁紙框架的限制內起作用。 – 2012-12-06 01:16:49

0

你可以讓你的引擎在一個單獨的類。我只是用我自己的壁紙試過,它編譯並運行良好。

在WallpaperService子類中的onCreateEngine()覆蓋中,只需將'this'傳遞給您的Engine構造函數。構造函數應該將其作爲WallpaperService接收。在構造函數的第一行中,調用wallpaperSvcObject.super()。

編輯:思考什麼賈斯汀布塞說後,我不知道如果我的建議是很好的。您的引擎將無法訪問WallpaperService的成員,因爲它必須通過wallpaperSvcObject。我不知道這是他所指的。

相關問題