Oi Bruna,
Muito obrigado por compartilhar o problema.
Quando compilo ResizingArrayQueue.java obtenho as mensagem abaixo
% javac ResizingArrayQueue.java
Note: ResizingArrayQueue.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
% javac -Xlint:unchecked ResizingArrayQueue.java
ResizingArrayQueue.java:50: warning: [unchecked] unchecked cast
q = (Item[]) new Object[2];
^
required: Item[]
found: Object[]
where Item is a type-variable:
Item extends Object declared in class ResizingArrayQueue
ResizingArrayQueue.java:75: warning: [unchecked] unchecked cast
Item[] temp = (Item[]) new Object[capacity];
^
required: Item[]
found: Object[]
where Item is a type-variable:
Item extends Object declared in class ResizingArrayQueue
2 warnings
Esses warnings são incômodos. O compilador esta nos avisando que estamos fazendo algo estranho. Sobre esses avisos o SW dizem que é assim mesmo. Não é possível alocar um array de um tipo genérico. Isso podemos facilmente verificar:
% javac -Xlint:unchecked ResizingArrayQueue.java
ResizingArrayQueue.java:51: error: generic array creation
q = new Item[2];
^
ResizingArrayQueue.java:77: error: generic array creation
Item[] temp = new Item[capacity];
^
2 errors
A política adotada por SW foi criar um vetor de referências e depois usar o casting para o compilador não gritar muito. Compilador gritando muito:
ResizingArrayQueue.java:50: error: incompatible types: Object[] cannot be converted to Item[]
q = new Object[2];
^
where Item is a type-variable:
Item extends Object declared in class ResizingArrayQueue
ResizingArrayQueue.java:75: error: incompatible types: Object[] cannot be converted to Item[]
Item[] temp = new Object[capacity];
^
where Item is a type-variable:
Item extends Object declared in class ResizingArrayQueue
2 errors
Com o casting o compilador passa de erros para avisos, como podemos verificar na primeira compilação acima.
Essa sugestão é proposta por outros. O sítio The finest artist, Effective Java 2/e, Item 26 apresenta uma (várias) sugestão (sugestões) interessantes.
A discussão sobre "arrays genéricos em Java" come solta no stackoverflow, por exemplo: [How to create a generic array in Java] (https://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java).
Na internet há ainda várias sítios falando sobre Java não permitir arrays genéricos:
Ideias?
Sugestões?
Dicas?