我正在研究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;
}
答案 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
的子类。