110

在阅读有关泛型的 Java 官方教程时,我发现您可以限制类型参数(在本例中为 is 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;
}
4

1 回答 1

171
<T extends MyClass & Serializable>

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

<T extends MyClass , Serializable>

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

于 2013-08-22T13:35:12.477 回答