Функция для преобразования отдельных объектов в массив? - PullRequest
3 голосов
/ 29 января 2009

Я хотел написать функцию, которая бы принимала объект и преобразовывала его в массив, содержащий этот объект как один элемент. Мне пришло в голову, что я мог бы сделать это с обобщениями и переменными аргументами, чтобы по существу сделать это автоматически, без необходимости писать функцию для каждого типа объекта, который я хотел бы использовать. Будет ли этот код работать? Есть ли какие-то тонкости, о которых мне нужно знать?

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

Ответы [ 3 ]

11 голосов
/ 29 января 2009

Почему бы просто:

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

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

6 голосов
/ 29 января 2009

Это работает, но похоже, что:

 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, но только если массив, конечно, является последним параметром.

0 голосов
/ 29 января 2009

Предполагая, что вам нужен массив с правильной типизацией, вы можете использовать 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...