2009-01-29 2 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. 
} 

Varargs может быть нами ed, но только если массив является последним параметром, конечно.

10

Почему не просто:

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

Что вы на самом деле пытаетесь достичь?

+0

Привет вы можете объяснить мне, как это работает? – uhs

+0

Первая строка создает новый объект и назначает ссылку на переменную с именем 'o'. Во второй строке создается массив типа Object с одним элементом (ссылка, которую мы создали ранее) и присваивает ссылку массива переменной с именем «array». Это помогает? Если нет, сообщите мне, какие вопросы остаются. – yawmark

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 
    } 
Смежные вопросы