Читая официальный учебник Java по дженерикам, я обнаружил, что вы можете ограничить аргумент типа (в данном случае T
), чтобы расширить класс и / или несколько интерфейсов с помощью оператора 'and' ( &
) следующим образом:
<T extends MyClass & Serializable>
Я заменил &
с ,
(по ошибке и по- прежнему работает, с предупреждением о незначительной).
Мой вопрос: есть ли разница между этими двумя:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
И примерный метод:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
Ответы:
Это утверждает, что параметр единственного типа
T
должен расширятьсяMyClass
и должен бытьSerializable
.Здесь объявляются два параметра типа: один вызываемый
T
(который должен расширятьсяMyClass
) и один вызываемыйSerializable
(который скрываетjava.io.Serializable
- вероятно, это то, о чем было предупреждение).источник