2014-09-03 29 views
0

我正在使用java,在運行時我得到了類名,但我想爲該類創建對象,我該如何做到這一點,任何人都可以幫助我。 我嘗試下面的方式請檢查我的代碼如下。如何通過在java運行時使用類名來獲得類對象

String emp = "Emp" // this is the classname i got in runtime(I will get dynamical this name) 
Object obj = class.forName().newInstance(); 

到這是工作正常,但我在上面的代碼中得到了java.lang.Object繼承我不希望對象我想這個對象轉換成我的類名(EMP)的對象。 像

Emp e =(Emp)obj; 

注:我不知道我每次都會在運行時獲取總的Emp類名時間我在myproject的100類,因此任何類名我會在這裏(像的Emp,部門,學生... ..)。

+0

反射是你的朋友 – 2014-09-03 14:01:41

+0

你想使用單身? – StackFlowed 2014-09-03 14:02:31

+0

http://stackoverflow.com/questions/10258245/java-using-class-forname-to-dynamically-get-a-new-instance-of-it – paulk23 2014-09-03 14:07:30

回答

0

也許我不明白你的問題,但如果你正在尋找只使用你的類名來創建類的實例,你可以試試這個方法:

public static MyClass getFromString(String myClassName) { 
    Object result = null; 
    MyClass final_result = null; 

    try{ 
     result = Class.forName(myClassName).getConstructor().newInstance(); 
     final_result= (MyClass)result; 
    }catch(ClassNotFoundException e){} //you must specify concrete Exception here 

    return final_result; 
    } 

希望它有幫助。

+1

'class.forName()。newInstance();' – Braj 2014-09-03 14:19:54

-1
Object object=Class.forName(className).getConstructor().newInstance(); 
+0

按照OP的要求,返回類型應該是'Emp'而不是'Object' – Braj 2014-09-03 14:10:14

-1
// Complete class name, including Package 
    String name = "com.foo.Emp"; 

    Object object = Class.forName(name).getConstructor().newInstance(); 
    if (object instanceof Emp) { 
    // Specific logic for Emp objects 
    } else if (object instanceof Dept) { 
    // Specific logic for Dept objects 
    } 

希望它可以幫助你

+0

大約在OPEN中提到的其他100個類別 – Braj 2014-09-03 14:09:27

+0

Upps,對不起。我沒有讀到你提到的100個班。 Auto flag for me – troig 2014-09-03 14:16:08

0

目前尚不清楚你試圖達到的目標。如果你確信你動態加載的類是Emp(或它的一個子類),就像你在你的問題中那樣進行類型轉換就足夠了。如果您對動態加載類型與Emp兼容有疑問,因爲您擁有100個其他類,那麼您對我們的期望不甚明確。

你可以做的是從實例中分離出類型檢查,例如,

Class<? extends Emp> type = Class.forName(className).asSubclass(Emp.class); 

Emp instance = type.newInstance(); 

這將檢查的類型是否是在第一線與Emp兼容,因此第二行保證返回的Emp一個實例。

但是,報告的不兼容類型的方式不會更改。這將通過投擲ClassCastException來完成。

如果這不是你要求的,你應該改寫你的問題。

+0

你怎麼說'Emp.class'?你只有一串類名 – Braj 2014-09-03 14:59:33

+0

@ user3218114:這就是爲什麼我說,目前還不清楚這些問題是關於什麼的。如果知道'Emp'就是編譯時間,那麼就像問題中已經寫好的簡單類型一樣。如果不是,那麼你不能有'Emp'類型的變量,那麼提問者實際上想要什麼? – Holger 2014-09-03 15:01:10

+0

我認爲OP想要確切類型的對象作爲類名稱,但這是不可能的。如果班級名稱是「Emp」,則返回'Emp',如果班級名稱是「學生」,則返回'Student'等。 – Braj 2014-09-03 15:02:06

相關問題