2013-08-25 56 views

回答

0

除非內類聲明爲static,如果沒有它所屬的外部類的實例,則無法創建內部類的實例。一旦你有了其中的一個,那麼你需要使用反射來獲得內部類的構造函數。請注意,這從文檔Class.getConstructor

如果Class對象表示非靜態上下文中聲明的內部類,形式參數類型包括明確的類實例作爲第一個參數。

最後,您需要調用構造方法的newInstance方法,將外部類的實例作爲第一個參數傳遞給它。

隨着外圍類的一個實例,你實際上並不需要反思:

BatteryStatsImpl stats = . . .; 
com.android.internal.os.BatteryStatsImpl.Uid obj = stats.new Uid(); 

編輯每請求時,這裏的一些示例代碼(有沒有錯誤檢查):

Class<?> statsClass = Class.forName("com.android.internal.os.BatteryStatsImpl"); 
Object statsObject = statsClass.newInstance(); 
Class<?> uidClass = Class.forName("com.android.internal.os.BatteryStatsImpl$Uid"); 
Constructor<?> ctor = uidClass.getConstructor(statsClass); 
Object uidObject = ctor.newInstance(statsObject); 

當然,請注意,因爲所有這些都是Android內部組件的一部分(而不是已發佈的API的一部分),它帶有一個標準的「自擔風險使用」警告:您正在使用的課程可能會更改(或失蹤)在未來ve的通知Android的rsions。

+0

你能否提供一些你提到的步驟的示例代碼 – mSO

+0

@Manish - 完成。 –

+0

在線構造器 ctor = uidClass.getConstructor(statsClass);異常提出了類型null – mSO