Deque.java

Deque.java

por Bruna Meneguzzi -
Número de respostas: 4

Bom dia,

Estou com uma duvida. Na implementação do main() de Deque.java, eu deixei dois while que testam separadamente as funções implementadas. Um while testa addLast e removeFirst e o outro testa addFirst e removeLast. Para usar um while ou outro, é preciso comentar/descomentar. Isso é válido? Já vi implementações de classes em que você manipula os comentários para testar as funções.

Se for válido, preciso deixar anotada uma observação em algum lugar para os monitores?

 

Obrigada,

Bruna

Em resposta à Bruna Meneguzzi

Re: Deque.java

por Victor Martins João -

Olá Bruna,

 

A função main não será corrigida, ela é para você fazer os seus próprios testes mesmo,

então não se preocupe em deixar comentários para nós na main.

Sinta-se a vontade para testar do jeito que você achar melhor, tudo é válido se te

ajudar a observar melhor o funcionamento do seu programa sorriso

 

Muito obrigado!

 

 

Em resposta à Victor Martins João

Re: Deque.java

por Bruna Meneguzzi -

Obrigada!

 

Surgiu outra duvida. Estou com problemas com o uso de

a = (Item[]) new Object[1];

 

Estou mandando os warnings e o erro que estou recebendo:

RandomizedQueue.java:33: warning: [unchecked] unchecked cast
           a = (Item[]) new Object[1];
                        ^
  required: Item[]
  found:    Object[]
  where Item is a type-variable:
    Item extends Object declared in class RandomizedQueue
RandomizedQueue.java:68: warning: [unchecked] unchecked cast
        Item[] tmp = (Item[]) new Object[max];
                              ^
  required: Item[]
  found:    Object[]
  where Item is a type-variable:
    Item extends Object declared in class RandomizedQueue
RandomizedQueue.java:105: error: incompatible types: Item#1 cannot be converted to Item#2
            b = a[p];
                 ^
  where Item#1,Item#2 are type-variables:
    Item#1 extends Object declared in class RandomizedQueue
    Item#2 extends Object declared in class RandomizedQueue.RandomQueue
1 error
2 warnings

Não estou conseguindo entender onde está o erro.

 

Obrigada

Em resposta à Bruna Meneguzzi

Re: Deque.java

por José Coelho de Pina -

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?