返回动态演员活动

时间:2013-05-20 10:51:01

标签: java android casting

我正在研究Android的测试库。

我想要做的是创建一个方法,从类名创建一个活动并返回活动实例。

例如,我收到了SampleActivity的类名,这个类作为一个活动扩展了android的Activity类。然后我需要返回的是SampleActivity

的实例

为清晰起见,请尝试删除。

这就是我现在所拥有的

public static Class<? extends Activity> createActivity(String activityName){

    Class<? extends Activity> clazz = null;
    Class<? extends Activity> activity = null;

    clazz = (Class<? extends Activity>) Class.forName(activityName);
    activity = clazz.newInstance(); // incompatible type

    return activity;
}

2 个答案:

答案 0 :(得分:0)

将您的活动变量更改为活动类型,而不是类。

您还应该更改方法声明,例如:

public <T extends Activity> T createActivity(String className)

如果您只将类知道为String,那么这是您可以做的最好的事情,而消费者只会将返回的对象知道为活动。如果它想要更具体的类型,它将需要强制转换它。看起来你似乎只有类名作为字符串,你的调用代码甚至会知道要转换的类型。

现在,如果你在编译时确实有类类型,你可以像这样定义方法:

public <T extends Activity> createActivity(Class<T> clazz){
    return clazz.newInstance();
}

但我的印象是你在编译时没有具体的类。

答案 1 :(得分:0)

我想如果我理解正确,这就是你需要做的事情:

public static Activity createActivity(String activityName)
{
    Class<? extends Activity> c = (Class<? extends Activity>) Class.forName(activityName);
    Activity activity = c.newInstance();
    return activity;
}

您可以按如下方式使用此课程:

SampleActivity sampleActivity = (SampleActivity) createActivity("com.abc.SampleActivity");

如果您想返回Class,请使用

public static Class<? extends Activity> createActivity(String activityName)
{
    Class<? extends Activity> clazz = null;
    Class<? extends Activity> activity = null;

    clazz = (Class<? extends Activity>) Class.forName(activityName);
    activity = clazz.newInstance(); 
    return activity.class;
}

确保activityName类的完全限定名称activityName所代表的类应该是Activity的子类。