我有以下代码,当我调用 newInstnace() 时出现实例化异常
你能帮忙吗
Class cls = Class.forName("com.android.internal.os.BatteryStatsImpl$Uid");
Object obj = cls.newInstance();
除非声明了内部类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 版本中恕不另行通知。