int vs int [] разница - автобокс внутри дженериков? - PullRequest
0 голосов
/ 30 октября 2011

См. Этот кусок кода:

import java.util.*;
public class Temp{
    public static void main(String[] args){
        List<int[]> list1 = new ArrayList<int[]>(); //WORKS!
        List<double[]> list2 = new ArrayList<double[]>(); //WORKS!
        //List<double> list3 = new ArrayList<double>(); //DOES NOT WORK
        //List<int> list4 = new ArrayList<int>(); //DOES NOT WORK
    }
}

AFAIK, дженерики Java не поддерживают примитивные типы, тогда как компилируется int[]? Как здесь возможен автобокс?

Ответы [ 4 ]

9 голосов
/ 30 октября 2011

int[] и double[] - это типы объектов, которые расширяются Object Они не являются примитивами.

Вы не можете автоматически связываться с массивами.Только между примитивами и их обертками.

1 голос
/ 30 октября 2011

AFAIK, дженерики Java не поддерживают примитивные типы, тогда как int [] компилируется?Как здесь возможен автобокс?

Во-первых, int[] и double[] не являются примитивными типами.Это ссылочные типы.

Во-вторых, здесь не происходит автобокс.Автобокс - это когда примитив значение преобразуется в соответствующий тип оболочки значение :

  • Здесь значения типа оболочки не используются.
  • Действительно, значения вообще не задействованы.(int[] - это тип, а не значение.)
  • Здесь даже не выполняется преобразование на уровне типа.

Все, что требуется, - это проверка типа во время компиляции.что int[] является подтипом Object.

И предпринятая попытка проверки во время компиляции, что int является подтипом Object ..., которая не выполняется и выдает ошибку компиляции.

Если вам нужен список целых или двойных чисел, вы должны явно использовать классы-оболочки в качестве параметра типа;например, List<Integer> или List<Double>.

1 голос
/ 30 октября 2011

Вы можете использовать только ссылочные типы (расширяемые от Object), так как generic не компилируется с int и double.

0 голосов
/ 30 октября 2011

они являются объектами.Вы всегда можете использовать Integer или Double.если вы хотите использовать int, вы должны использовать Trove http://trove.starlight -systems.com /

...