2014-04-20 126 views
1

我想通過字符串變量創建新的類實例,並將int []作爲參數傳遞給此構造函數,並將此實例保存在數組列表中。如何通過字符串名稱創建類實例

更重要的是,該類來自其他一些類,讓我們說吧。該數組列表的類型是Bar。所以:

List<Bar> something = new ArrayList<Bar>(); 
    String name = "Foo"; 
    int[] arr = {1, 2, 3, 4, 5}; 
    try { 
     Class myClass = Class.forName(name); 
     Class[] types = {Integer.TYPE}; 
     Constructor constructor = myClass.getConstructor(types); 
     Object[] parameters = {arr}; 
     Object instanceOfMyClass = constructor.newInstance(parameters); 
     something.add(instanceOfMyClass); 
    } catch(ClassNotFoundException e) { 
     // handle it 
    } catch(NoSuchMethodException e) { 
     // handle it 
    } catch(InstantiationException e) { 
     // handle it 
    } catch(IllegalAccessException e) { 
     // handle it 
    } catch(InvocationTargetException e) { 
     // handle it 
    } 

這是我想出的,但不幸的是它不工作。我怎樣才能傳遞整數數組(這將是什麼類型)?我如何將這個實例添加到這裏給出的數組列表中(它會拋出一個錯誤,我必須將Foo類的實例轉換爲Foo類)?

+0

'something.add((酒吧)instanceOfMyClass);' – mostruash

+0

什麼行引發錯誤?什麼是堆棧跟蹤? (或者這是一個編譯時錯誤?) –

+0

嗯,它並不重要,因爲只有這兩件事情給錯誤,並糾正它的作品,謝謝! ;) – khernik

回答

4
Class[] types = {Integer.TYPE}; 
Constructor constructor = myClass.getConstructor(types); 

此查找一個構造函數一個intInteger,不是int秒的陣列。

如果你想查找其採用int[]構造,然後傳遞正確的參數:

Class[] types = { int[].class }; 
Constructor constructor = myClass.getConstructor(types); 
相關問題