Java приведение массива примитивов к Object[]. Возможно ли?

Рейтинг: 1Ответов: 3Опубликовано: 06.02.2015

Здравствуйте, уважаемые.

Задался целью передать в метод любой массив.

Проблема возникла с передачей массива примитивов, так как примитивы не производны от Object, соответственно и их массивы так же.

Собственно, вопрос - как передать в метод массив любых примитивов?

UPD: Вариант с передачей множественных аргументов (public void someMethod(Object... args)) не устраивает, так как у меня тип аргумента обрабатывается через карту Map<Class<?>, ISerializer>, потому и выборка нужна именно по критерию "массив примитивов".

Ответы

▲ 4Принят

Предлагаю такое решение: перегрузите (overload) Ваш метод для всех возможных примитивов следующим образом:

public void someMethod(Object[] args) {
    //your code
}

public void someMethod(int[] ints) {
    Object[] args = new Object[ints.length];
    for (int i=0; i<ints.length; i++) {
        args[i] = (Object) ints[i];
    }
    return someMethod(args);
}

Теперь Вы можете вызывать ваш метод, передавая ему массив int, а реализацию метода писать для массива Object.

▲ 3

Передавайте массив обёрток над примитивами (Integer, Double и т. д.), они именно для этих целей и были созданы.

▲ 2

Вообще-то есть абстрактный класс Number. От которого наследованы всякие Long,Double, Integer. И как жалко что нету класса какого нибудь "PrimitiveWrapper" :)