Читая официальный учебник 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;
}
5
@Doorknob, вы предполагаете, что OP использует клавиатуру и ту же клавиатуру, что и вы.
—
emory
@emory Я думаю, что даже это неправильное направление - ошибка была не в его пальцах, а в его мозгу. Точно так же, как если бы вы пытались использовать «include» вместо «import» в исходном файле Java. Вы ошиблись при вводе слова «включить», потому что ваш мозг сказал вам ввести неправильный текст, что возможно по разным причинам.
—
Ник Пикеринг,
@ Николас Пикеринг, верно! Для меня это была опечатка не из-за клавиатуры, а из-за мозга. Когда вы пишете, какие интерфейсы реализует класс, вы разделяете их запятыми.
—
Алин Чокан