Java泛型中'&'和','有什么区别?

Ali*_*can 110 java generics

在阅读关于泛型的Java官方教程时,我发现你可以限制类型参数(在本例中是T)用'and'运算符(&)扩展类和/或更多接口,如下所示:

<T extends MyClass & Serializable>
Run Code Online (Sandbox Code Playgroud)

我替换了&with ,(错误地仍然有效,并带有一个小警告).

我的问题是,这两者之间有什么区别:

<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Run Code Online (Sandbox Code Playgroud)

和示例方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

ars*_*jii 169

<T extends MyClass & Serializable>
Run Code Online (Sandbox Code Playgroud)

这断言单一类型参数T必须扩展MyClass且必须是Serializable.

<T extends MyClass , Serializable>
Run Code Online (Sandbox Code Playgroud)

声明了两个类型参数,一个叫T(必须扩展MyClass)和一个叫Serializable(隐藏java.io.Serializable- 这可能是警告的内容).