0

我有以下代码,当我调用 newInstnace() 时出现实例化异常

你能帮忙吗

  Class cls = Class.forName("com.android.internal.os.BatteryStatsImpl$Uid");
Object obj = cls.newInstance();
4

1 回答 1

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 的一部分),它带有一个标准的“使用风险自负”警告:您使用的类可能会发生变化(或消失) ) 在未来的 Android 版本中恕不另行通知。

于 2013-08-25T08:07:25.280 回答