make arrayList.toArray () возвращает более конкретные типы
189
Итак, обычно ArrayList.toArray()возвращает тип Object[].... но предполагается, что это
Arraylistобъект Custom, как мне сделать, toArray()чтобы вернуть тип, Custom[]а не Object[]?
AFAIK: Это как-то связано с Java в целом, поскольку он не может использовать универсальные конструкторы. Поэтому, хотя он знает, что он вам нужен для преобразования вас в объект типа String [] или MyObject [], он не может создать его экземпляр самостоятельно.
Что если вместо String мы хотим использовать double? Кажется, что не получается ... Мы можем использовать Double, но что, если я хочу двойной?
Пиксель
2
@pbs Ты не можешь. Обобщения Java поддерживают только ссылочные типы, а не примитивы. Автобокс / распаковка должны позволять вам игнорировать разницу между ними по большей части.
solarshado
16
Это действительно не нужно возвращать Object[], например: -
Я получил ответ ... это, кажется, работает отлично
publicint[] test (int[]b ){ArrayList<Integer> l =newArrayList<Integer>();Object[] returnArrayObject = l.toArray();int returnArray[]=newint[returnArrayObject.length];for(int i =0; i < returnArrayObject.length; i++){
returnArray[i]=(Integer) returnArrayObject[i];}return returnArray;}
Что если у нас есть ArrayList <Animal> и он содержит типы Dog и Cat, расширяющие Animal? Похоже, что он потерпит неудачу, если первый элемент - Dog, а следующий - Cat. Он видит первый элемент, создает массив типа Dog, добавляет собаку, затем пытается добавить кошку и терпит неудачу. Также может не работать с дженериком Е.
Ответы:
Как это:
Перед Java6 было рекомендовано написать:
потому что внутренняя реализация перераспределит массив правильного размера в любом случае, поэтому вам лучше сделать это заранее. Поскольку Java6 предпочтителен пустой массив, см. .ToArray (new MyClass [0]) или .toArray (new MyClass [myList.size ()])?
Если ваш список набран неправильно, вам нужно выполнить приведение перед вызовом toArray. Как это:
источник
Это действительно не нужно возвращать
Object[]
, например: -Вот мой
Custom
класс: -источник
http://download.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object[]%29
источник
Я получил ответ ... это, кажется, работает отлично
источник
Образцы:
источник