是否可以在Java中将类名作为参数传递?

时间:2016-04-29 13:33:22

标签: java

我有以下代码:

private void startLesson(String input) {
    Intent intent = new Intent(StartovayaAktivnost.this, OsnovnayaAktivnostORM.class);
    intent.putExtra("vybor_razdela", input);
    startActivity(intent);
}

我想根据参数启动不同的活动,是否有一个传递类名称的简单解决方案,如

 private void startLesson(String input, String activityname) {
    Intent intent = new Intent(StartovayaAktivnost.this, activityname.class);
    intent.putExtra("vybor_razdela", input);
    startActivity(intent);
} //I know it's not gonna work

或唯一的方法是使用像

这样的分支
    private void startLesson(String input, String activityname) {
    if (activityname.equals("OsnovnayaAktivnost")) 
    {
        Intent intent = new Intent(StartovayaAktivnost.this, OsnovnayaAktivnost.class);
        intent.putExtra("vybor_razdela", input);
        startActivity(intent);
    }
    else if (activityname.equals("OsnovnayaAktivnostORM")) {
        Intent intent = new Intent(StartovayaAktivnost.this, OsnovnayaAktivnostORM.class);
        intent.putExtra("vybor_razdela", input);
        startActivity(intent);
    }
}

4 个答案:

答案 0 :(得分:3)

您可以将一个类作为参数。请考虑以下事项:

private void startLesson(String input, Class activityname) {
    Intent intent = new Intent(StartovayaAktivnost.this, activityname);
    intent.putExtra("vybor_razdela", input);
    startActivity(intent);
}

然后,您可以将方法称为

startLesson("input", Main.class);

与他们使用类作为参数的方式相同。

答案 1 :(得分:1)

你可以这样做:

Class<?> myClass = Class.forName(activityname);
Intent intent = new Intent(StartovayaAktivnost.this, myClass);
intent.putExtra("vybor_razdela", input);
startActivity(intent);

但是,activityname应该是完整的类名。

答案 2 :(得分:1)

您已经有答案向您展示解决方案。我对你的用例更好奇。对于类似的情况,我创建了一个字符串映射到某个基类型的类。将 activityName 传递给该地图时,我会找到该活动。这使您可以更好地控制在这种情况下允许加载哪种类。在您的场景中,更难限制哪些类可以传递到Intent。但我想他们必须遵守构成某项活动的某些规则。

类似的东西:

Map<String, MyBaseActivityType> activities

如果您每次都需要活动课程的新实例,您可以对其进行一些修改,但我还没有想到这一部分。

但除非你真的需要,否则不要使用 reflection 。它很快就会变得混乱。

答案 3 :(得分:0)

随机尝试找到答案:

private void startLesson(String input, String activityname) throws ClassNotFoundException {
        Intent intent = new Intent(StartovayaAktivnost.this, Class.forName(activityname));
        intent.putExtra("vybor_razdela", input);
        startActivity(intent);
}