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
– 这可能是警告的意思)。