2009-01-29 20 views
2

我想寫一個函數,將一個對象並將其轉換爲包含該對象的數組作爲單個元素。我想,我可能可以用泛型和變量參數來做到這一點,基本上這樣做,而不需要爲我希望使用的每種對象類型編寫函數。此代碼是否可以工作?我需要注意哪些細節?將單個對象轉換爲數組的函數?

public static <X> X[] convert_to_array(X... in_objs){ 
    return in_objs; 
} 

回答

3

它的工作原理,但它似乎是:

Object o = new Object(); 
someMethod(new Object[] { o }); 

是一個小更直接的則:

Object o = new Object(); 
someMethod(convert_to_array(o)); 

在有時我想傳遞一個對象的情況下,但有時我想傳遞一個數組,通常我只是在API中使用重載方法:

public void doSomething(Object o) 
{ 
    doSomething(new Object[] { o }); 
} 

public void doSomething(Object[] array) 
{ 
    // stuff goes here. 
} 

可變參數可以是我們但只有當數組是當然最後一個參數。

10

爲什麼不乾脆:

Object o = new Object(); 
Object[] array = { o }; // no method call required! 

什麼是你真正想要實現?

+0

嗨,你可以給我解釋一下它是如何工作的? – uhs 2014-02-14 05:22:20

0

假設你需要,你需要的是正確類型的數組,你可以使用java.lang.reflect.Array中:

static public Object[] createTypedArray(Object elm) { 
    Object[] arr=(Object[])java.lang.reflect.Array.newInstance(elm.getClass(),1); 
    arr[0]=elm; 
    return arr; // this can be cast safely to an array of the type of elm 
    }