В чем разница между '&' и ',' в Java-дженериках?

Во время чтения официального учебника Java о дженериках я обнаружил, что вы можете ограничить аргумент типа (в данном случае - T) расширять класс и/или больше интерфейсов с помощью оператора "и" (&) например:

<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;
}

Ответ 1

<T extends MyClass & Serializable>

Это означает, что параметр одиночного типа T должен расширять MyClass и должен быть Serializable.

<T extends MyClass , Serializable>

Это объявляет два типа параметров, один из которых называется T (который должен расширять MyClass), а один из них называется Serializable (который скрывает java.io.Serializable - это, вероятно, предупреждение).