2010-05-30 6 views
2

Почему это один не работает:Дженерики синтаксис: классы против примитивных типов данных

ArrayList<LinkedList<int>> 

где это делает:

ArrayList<LinkedList<Integer>> 

???

+0

Пожалуйста, исправьте опечатку в вашем вопросе. Синтаксис синтаксиса ->, у меня пока нет достаточной репутации для этого. –

+0

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

ответ

1

Аргумент в <> должен быть объектом, поскольку эти классы могут содержать только объекты.

int - это примитивный тип, где Integer - это просто класс обертки для этого типа, поэтому Integer - это тот, который будет работать.

+0

да, я получил это :) i thoght, это действительно работает для LinkedList , так что это заставило меня сходить с ума "просто запутался с C++. – yoavstr

6

Поскольку Java может использовать только классы (а не примитивные типы) и массивы (также массивы для примитивов) для дженериков (между < и >).

List<Integer> list; 

Это также является причиной, почему существуют классы-оболочки для примитивных типов:

int -> Integer 
boolean -> Boolean 
double -> Double 
byte -> Byte 
etc... 
+0

он будет принимать примитивные массивы. – Tedil

+0

Согласен, но недавно в интервью мне было предложено написать общий класс, который может принимать как примитивный, так и объект? Я не смог ответить на этот вопрос. Мне было интересно, вопрос на первом месте. – plzdontkillme

+0

Возможно, интервьюер искал 'public MyClass '? Это не работает для булевых. –

0

becuase определения является LinkedList<T> и только Object может быть здесь <T>.

int примитивный тип так LinkedList<int> - compile error
Integer является объект LinkedList <Integer> - right one

Смежные вопросы