’&’和’’在 Java 泛型中的区别是什么?

在阅读关于泛型的 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;
}
3286 次浏览
<T extends MyClass & Serializable>

This asserts that the single type parameter T must extend MyClass and must be Serializable.

<T extends MyClass , Serializable>

This declares two type parameters, one called T (which must extend MyClass) and one called Serializable (which hides java.io.Serializable — this is probably what the warning was about).