Generics: ожидается массив типа

У меня есть следующий код:

public class DEF implements Set<ABC> {

   private EnumSet<ABC> xyz=EnumSet.noneOf(ABC.class);

   @Override
   public <T> T[] toArray(T[] a) {
       return xyz.toArray(a);
   }

}

Что дает мне следующее предупреждение:

Массив типа 'ABC[]' ожидается в строке 43

Это опасно? Или я могу игнорировать это? Почему это предупреждение?

1 ответ

Решение

Предупреждение полностью верно; ваш код не имеет смысла.

Письменно <T> T[] toArray()Вы создали функцию, которую можно вызывать с любым параметром типа и которая будет возвращать массив этого типа.
Всегда возвращая массив ABCs нарушает то, что вы утверждали, что это будет делать.

Короче говоря, эта функция не должна быть универсальной.


Ничто из этого не применимо к вашему делу, потому что база Set<E> интерфейс требует этого.

Я не имею понятия почему Set<E> объявляется таким образом, но вы ничего не можете сделать с предупреждением.

Другие вопросы по тегам