2014-04-20 2 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

'((바) instanceOfMyClass) something.add,' – mostruash

+0

은 무엇 라인 오류를 던지고있다? 스택 트레이스는 무엇입니까? (또는 이것은 컴파일 타임 오류입니까?) –

+0

사실,이 두 가지만 오류를주고 있었으므로 문제가되지 않습니다. ;) – khernik

답변

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

이 하나 또는 intInteger, int S 아닌 배열하는 생성자를 보인다.

당신이 int[] 소요 생성자를 조회하려면, 다음 올바른 인수를 전달합니다

Class[] types = { int[].class }; 
Constructor constructor = myClass.getConstructor(types); 
관련 문제