2016-04-29 32 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

您已經有了答案,告訴你的解決方案:

相關問題