Класс Object
и интерфейсы Comparable
и Serializable
являются супертипами, общими для классов Integer
и String
.
Из-за стирания типов в дженериках и ковариации массивов, дженерики и массивы не очень хорошо сочетаются друг с другом. Метод Arrays#asList
принимает в качестве входных данных переменные, а в Java переменные внутренне реализуются с помощью массивов. Отсюда и предупреждение. (Вы можете прочитать больше об этом в «Эффективной Java» Джоша Блоха.)
Теперь перейдем ко второму вопросу: <Object & Comparable<Whatever> & Serializable>
можно использовать в сигнатурах методов для указания ограничений на параметры типа. (См. этот ответ .) Java, однако, не допускает такие типы в аннотациях универсальных типов.
Другими словами, действует следующее:
public static void <A extends Comparable<A> & Serializable> meth(A a);
но это не так:
List<Serializable & SomeOtherInterface> list = ...;