2013-04-11 76 views
12

我想將類類型作爲參數傳遞給java.all中具有相同構造函數參數的方法,並在該方法中創建該類的實例.is這可能嗎?傳遞類類型作爲參數並創建它的實例

+0

您確定您確實「想要」這樣做嗎?我不會「想」這樣做 - 永遠。 – Dariusz 2013-04-11 06:23:21

+0

你的用例是什麼引人注目? – Santosh 2013-04-11 06:24:37

+0

有一些有效的用例,例如從基於工廠/構造函數的注入實例化類。除非你正在編寫這樣的框架,否則你還可以使用DI來通過構造函數注入來實例化類。 – 2013-04-11 06:29:40

回答

14

使用反射創建實例:

Object obj = clazz.newInstance(); 

這將使用默認no-arg構造函數來創建實例。

Constructor<?> constructor = clazz.getConstructor(String.class); 
Object object = constructor.newInstance(new Object[] { strArgument }); 

要創建實例,如果您有一些其他構造函數需要參數。

3

你需要使用反射來做到這一點,但是它是肯定可能的。

void MyMethod(Class className) 
{ 
    try { 
     Object obj = className.newInstance(); 
     //obj is a newly created object of the passed in type 
    } 
    catch (Exception ex) { } 
} 
2

您正在尋找反射。

你的方法會是這個樣子:

public void m1(Class c) { 

     try { 
     Object obj = c.newInstance(); 
     //do something with your new instance 
    } catch (InstantiationException ex) { 

    } catch (IllegalAccessException ex) { 

    } 
} 

的反射API Oracle的文檔是here

1

是的,你可以

void x(Class cls) throws InstantiationException, IllegalAccessException { 
    cls.newInstance(); 
} 

注意Class.newInstance可能會失敗,

IllegalAccessException - 如果該類或其null構造方法是不可訪問。 InstantiationException - 如果此類表示抽象類,接口,數組類,基本類型或void;如果此Class表示抽象類,接口,數組類,或者如果班級沒有空的構造函數;或者由於其他原因實例化失敗。

查看API瞭解更多

相關問題