检查动态创建的类是否为活动

时间:2017-10-28 13:47:00

标签: java android class instance

我的应用程序有几个活动,以及"开始活动"纽扣。我为此创建了一个自定义视图。因此,我不需要处理点击处理程序和切换语句,我可以在布局的XML文件中设置custom:start_activity=".OtherActivity"属性。

当然,好的计划。但我必须为此提供错误检测。 start_activity中的类型字符串必须是有效的类名,并且该类必须是Activity的子类。 OtherActivity是类的子类,它是AppCompatActivity的子类。

这是我尝试过的:

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不会被抛出,在调试器中,我可以在Activity的超类树中看到check。我不知道,我做错了什么?

1 个答案:

答案 0 :(得分:1)

除非检查是实例化的/是对象,否则

isInstance()并且instanceOf将不起作用。

你可以做到

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

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

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