java - 检查动态创建的类是否是一个 Activity

标签 java android class instance

我的应用程序有几个 Activity ,以及“开始 Activity ”按钮列表。我为此创建了一个自定义 View 。为了不需要处理点击处理程序和切换语句,我可以在布局的 XML 文件中设置一个 custom:start_activity=".OtherActivity" 属性。

当然,不错的计划。但我必须为此提供错误检测。 start_activity 中键入的字符串必须是有效的类名,并且该类必须是 Activity 的子类。 OtherActivityAppCompatActivity 子类的子类。

这是我试过的:

String name = array.getString(R.styleable.MyView_start_activity);
if (name == null)
    throw new IllegalArgumentException("name attribute must be set.");
final String className = context.getPackageName() + activity;
try {
    Class<?> check = Class.forName(className); //, false, getClass().getClassLoader()); // create only at click later
    if (!Activity.class.isInstance(check))
        throw new IllegalArgumentException(className + " is not a valid activity.");
} catch (ClassNotFoundException e) {
    throw new IllegalArgumentException(className + " is not a valid class.");
}

但是,isInstance 总是返回 false,所以它一直抛出异常。我还尝试了 isAssignableFrom 和不同的参数/类变体。给定的字符串是一个有效的类,ClassNotFoundException 没有被抛出,在调试器中,我可以在 check 的父类(super class)树中看到 Activity .我不知道,我做错了什么?

最佳答案

isInstance() 和 instanceOf 将不起作用,除非检查被实例化/是一个对象。

你可以做

if (!Activity.class.isInstance(check.newInstance()))

if (!(check.newInstance() instanceof Activity))

假设为此检查实例化您的对象是安全的。

关于java - 检查动态创建的类是否是一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990421/

相关文章:

Android检测正确的手机震动

java - 如何使用 Jackson 反序列化泛型 List<T>?

java - 提高 Lombok @Data 代码覆盖率

android - 修改Android TextView仅在指定字符处换行

java - 如何将反射与 Mockito 模拟对象一起使用

java - 在Java对象中接收JSON数据

javascript - 在文件之间拆分 Node.js 类扩展

class - 如何制作一个Applet类是单例的Scala Applet?

java - Android fragment 和空对象引用

java - 我们如何从操作中获取 JSON 响应