Javagenerics中“&”和“,”有什么区别?

在阅读关于generics的Java官方教程时,我发现你可以限制types参数(在这种情况下是T )来扩展一个类和/或更多的与'和'运算符( & )的接口,如下所示:

 <T extends MyClass & Serializable> 

我用&replace了, (错误的,仍然有效,还有一个小小的警告)。

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

 <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 extends MyClass & Serializable> 

这断言单个types参数T必须扩展MyClass并且必须是可Serializable

 <T extends MyClass , Serializable> 

声明了两个types参数,一个叫T (它必须扩展MyClass )和一个叫Serializable (它隐藏了java.io.Serializable – 这可能是警告的意思)。