Как мы можем работать с универсальными типами и примитивами в Java - PullRequest
0 голосов
/ 06 мая 2011

У меня есть объект, который содержит массив, но тип массива будет различаться каждый раз.

Я мог бы сделать что-то вроде

class MyObject<T>
{
    public T [] data;
}

Дело в том, что это не работает с примитивными типами (int, double, ...) и заставляет меня работать с объектами (Integer,Двойной ...).

Есть ли способ избежать этого?

Спасибо за приключение

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Вы должны знать, что autoboxing в Java может делать именно то, что вы ищете. Посмотрите этот пример кода по ссылке:

// List adapter for primitive int array
public static List<Integer> asList(final int[] a) {
    return new AbstractList<Integer>() {
        public Integer get(int i) { return a[i]; }
        // Throws NullPointerException if val == null
        public Integer set(int i, Integer val) {
            Integer oldVal = a[i];
            a[i] = val;
            return oldVal;
        }
        public int size() { return a.length; }
    };
}

Этот метод get() возвращает простой старый тип данных int, который автоматически преобразуется в Integer. Аналогично, метод set() принимает Integer и присваивает элемент int в массиве.

Автобокс не является очевидной особенностью, но он обрабатывает автоматическое создание объекта.

1 голос
/ 06 мая 2011

Вы не можете использовать примитивы в дженериках, как вы можете использовать в C ++ с шаблонами.

Если вы хотите коллекцию, которая использует примитивы, я предлагаю вам посмотреть http://trove.starlight -systems.com / Вы можете передать этот тип коллекции как часть универсального.т.е. вместо передачи примитивного типа, передайте тип коллекции.

MyObject<List<String>> containsStrings = ...
MyObject<TIntArrayList> contains_ints = ...
0 голосов
/ 06 мая 2011

Это невозможно. Преобразовать примитивные массивы в их OO-эквиваленты.

...