2014-01-17 3 views
1

У меня есть этот код, который дает мне ошибку, что «не может создать общий массив BST_Node»Как создать массив фиксированного размера общего типа в Java?

BST_Node<Integer>[] arrayTree = new BST_Node<Integer>[treeSize]; 

Я не знаю, почему, потому что у меня есть

Integer[] arrayTree = new Integer[treeSize]; 

и она прекрасно работает. Почему он не может создать массив фиксированного размера с общим типом и как правильно это сделать?

+2

http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#createArrays; В то время как вы можете бросить, чтобы обойти это, используйте «ArrayList >» и сделайте с ним. –

ответ

6
BST_Node<Integer>[] arrayTree = (BST_Node<Integer>[]) new BST_Node[treeSize]; 

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

См исчерпывающее объяснение here или here

2

Массивы не являются общими. Вот почему массивы проверяются во время компиляции, а также во время выполнения, когда коллекции могут быть универсальными и проверяться только во время компиляции. Поэтому, когда вы объявите общий массив, вы должны сделать так:

BST_Node<Integer>[] arrayTree = (BST_Node<Integer>[]) new BST_Node[treeSize]; 
Смежные вопросы