2016-10-20 120 views
2

我通過傑克森傾銷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)); 
    } 
} 

我的具體類(和抽象類,我剛剛複製嘗試)。有2個構造

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

好問題 - 謝謝你格式化它,並給出一個很好的,整潔的例子。總是有幫助=) – Addison

回答

3

參見Problem with constructing class using reflection and array arguments

的問題是,已經newInstance取對象的數組。您需要將您的對象數組包含在另一個數組中。事情是這樣的:

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解決方案之前(在第二次搜索之後)去回答它的麻煩。 – Addison

相關問題