Unchcked Cast Generics - PullRequest
       31

Unchcked Cast Generics

0 голосов
/ 01 мая 2011

В моем коде у меня private E[] arrCirc; , а в конструкторе arrCirc = (E[]) new Object[capacity];, но когда я пытаюсь скомпилировать его, я получаю предупреждение:

[unchecked] unchecked castнайдено: java.lang.Objectтребуется: E []

Ошибка, и я не уверен, почему.

public class Array12<E> implements LimCapList<E>{

  private int size = 0;
  private int capacity = 0;
  private int front;
  private int back;
  private E[] arrCirc;

  public Array12(int capacity){
     if( capacity <= 0)
       throw new IllegalArgumentException();
     arrCirc = (E[]) new Object[capacity];
     front = 0;
     back = 1;
  }

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Можете ли вы сделать свой arrCirc типа Object[] (как и большинство универсальных коллекций в openJDK)?

(и сделать arrCirc = new Object[capacity];)

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

        @SuppressWarnings("unchecked")
        public Array12(int capacity){
             if( capacity <= 0)
               throw new IllegalArgumentException();
             arrCirc = (E[]) new Object[capacity];
             front = 0;
             back = 1;
          } 
0 голосов
/ 01 мая 2011

Java использует Type Erasure для реализации обобщений, поэтому во время выполнения она не может знать, что вы имеете в виду (E []), поэтому вы получаете предупреждение о потенциально небезопасном приведении.

Взгляните на документацию Sun (эм ... Oracle): http://download.oracle.com/javase/tutorial/java/generics/erasure.html

Вы всегда можете использовать @SuppressWarnings(value = "unchecked"), чтобы предупреждение исчезло.

...