2016-04-29 65 views
1

我有以下代码:是否可以在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 

或唯一的办法就是使用embranchments像

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); 
    } 
} 
+2

只需在类类型上使用'.getName()',例如'StartovayaAktivnost.class.getName()'。 –

+0

是的,这是可能的..然后你可以做的一切几乎与你的类对象在该方法接收传递的类对象。 –

回答

2

你可以有一个类作为参数。考虑以下几点:

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); 

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

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); 
} 
1

,你可以这样做:

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

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

+1

它是类名,而不是根据问题应该传递的类。 –

+1

activityname仍然是一个表示类名的字符串,但是,此解决方案仅适用于完整的类名(package.subpackage.ClassName)。 – Bruno

0

,而在随机试图找到答案。尽管如此,我对你的使用案例更加好奇。对于类似的情况,我创建了一个字符串映射到某个基类的类。当将活动名称传递到该地图时,我会找到该活动,或不。这使您可以更好地控制在这种情况下允许加载哪种类。在你的场景中,限制什么样的类可以传入Intent会更困难。但我想他们必须遵守构成活动的某些规则。

喜欢的东西:

Map<String, MyBaseActivityType> activities 

如果您需要的活动类的新实例每次,你可以修改它了一下,我并没有给这部分想那么多。

但是不要使用reflection除非你确实需要它。它迅速变得凌乱。

1

您已经有了答案,告诉你的解决方案:

相关问题