2016-10-20 5 views
2

나는 jackson을 통해 CSV를 버리고 있습니다. 몇 가지 매핑 클래스가 있고 매핑 클래스를 CSV 내보내기 메서드에 전달하려고합니다.리플렉션을 통해 Java에서 생성자를 호출하려면 어떻게해야합니까?

나는 추상적 인 클래스를 가지고 있고 그것을 각각의 csv 컬럼 포맷으로 확장했다. 클래스의 이름을 내보내기 함수에 전달한 다음 클래스의 생성자를 통해 데이터를 매핑하고이를 CSV로 덤프하려고합니다.

매핑을 수행하고 내보낼 클래스를 만들 때까지 모두 괜찮습니다.

호출 예외/매개 변수 개수가 잘못되었습니다.

protected String mapTransactionsToCSV(List<Object[]> results, String rowClassName) 
    Class rowClass = Class.forName(rowClassName); 
    for (Object[] component : results) 
    VehicleAbstract vehicle = (VehicleAbstract) rowClass.getDeclaredConstructor(Object[].class).newInstance(component); 
    csv.append(mapper.writer(schema).writeValueAsString(vehicle)); 
    } 
} 

내 특정 클래스 (및 방금 복사 한 추상 클래스). 이 생성자

public Bus() {} 
public Bus(Object[] component) {} 
+0

좋은 질문 - 멋지게 서식을 지정하고 멋진 예제를 제공해 주셔서 감사합니다. 항상 도움이됩니다 =) – Addison

답변

3

이 문제는 newInstance 이미 객체의 배열을 취하는 것입니다 Problem with constructing class using reflection and array arguments

를 참조있다. 객체 배열을 또 다른 배열로 래핑해야합니다. 이런 식으로 뭔가가 : - 대신 하나 개의 매개 변수 (객체의 배열, 별도의 매개 변수로 객체 배열의 각 항목을 전달하는

component = {component}; // Wrap in a new object array 
VehicleAbstract vehicle = (VehicleAbstract) rowClass.getDeclaredConstructor(Object[].class).newInstance(component); 

이것은 당신이 매개 변수의 잘못된 수를 얻고있는 이유).

+0

복제본이라고 생각하시면 닫으시기 바랍니다. 결국 [3k 평판을 얻었을 때] (http://stackoverflow.com/help/privileges/close-questions) 투표를 할 수 있습니다. –

+0

나는 그것을 미래에 할 것이다, @SotiriosDelimanolis. 나는 지금 특권을 얻었으므로 깃발로 가고 싶지 않았습니다. 게다가, 나는 심지어 SO 솔루션을 발견하기도 전에 (2 차 검색 후) 대답에 어려움을 겪었다. – Addison

관련 문제